在子系统上安装 SQL Server 上基本按照微软官方的 Tutorial, 原来想着照着上面的命令敲一遍完事大吉, 结果敲完最后一个命令sudo /opt/mssql/bin/mssql-conf setup 报错了:
| 1 | System has not been booted with systemd as init system (PID 1). Can't operate. | 
启动 SQL Server 失败。在这里折腾了很久,尝试了各种姿势,后来发现需要在子系统上正常执行 systemctl 才可以,参考这篇做了一些设置:
首先安装 daemonize 和 fontconfig:
| 1 | sudo apt install -y fontconfig daemonize | 
编辑/etc/profile 并加入下面的内容:
| 1 | SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}') | 
修改/etc/sudoers并加入下面的内容:
| 1 | %sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target | 
最后执行下source /etc/profile确认设置成功
设置成功后参考微软的文档重新生成下数据库, 按照操作设置完密码重新启动 SQL Server 服务后登录 SQL Server:
| 1 | sqlcmd -S localhost -U SA -P | 
现在其实可以在主机用 SSMS 登录子系统的 SQL Server 了,首先看下子系统的 IP 地址:
| 1 | ip addr | 
得到的 IP 地址作为服务器名称填上去,再选 SQL Server 身份验证填上用户名密码就可以登录了。
在 tempdb 数据库建一个数据表并插入两条记录来测试 Sqoop:
| 1 | USE tempdb; | 
设置好 Sqoop 和 Hadoop 后用下面的命令来讲数据库 tempdb 里的 Inventory 表导入到 HDFS:
| 1 | sqoop import \ | 
上面的命令会把数据导入到 /mssql 这个路径下面。