在子系统上安装 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
这个路径下面。