• C#码农的大数据之路


    准备主机

    准备3台主机,名称作用如下:

    昵称 Fully Qualified Domain Name IP 作用
    Ubuntu-Parrot head1.parrot 192.168.9.126 Ambari控制中心,头结点(辅助)
    Ubuntu-Laiothrix head0.parrot 192.168.9.127 头节点(主)
    Ubuntu-Siskin data0.parrot 192.168.9.128 数据节点

    使用hostname <fully.qualified.domain.name>修改主机名,等价于编辑/etc/hostname文件(前者临时,后者永久)
    并使用hostname -f获取FQDN,那验证上面的修改是否成功

    对每一台主机还要进行如下设置:

    • 配置NTP,sudo apt-get install ntp并设置服务自动启动sudo systemctl enable ntp
    • 关闭防火墙:sudo ufw disable
    • 为所有用户指定umask:sudo echo umask 0022 >> /etc/profile (这样所有新创建的文件都具有755权限)
    • 安装Python2.7, sudo apt-get install python,虽然Ubuntu16.04默认集成了Python3.5但那不适用于Ambari

    楼主使用hystar作为集群中所有主机的用户名,复制文中命令时,请将用户名改为您电脑的用户名

    配置网络

    配置HDP集群原则上要求所有主机可以FQDN(Fully Qualified Domain Name)相互找到对方,包括从IP查找FQDN以及由FQDN查找IP,对于商用的集群这个需要配置集群内DNS来完成。对于测试目的的集群,可以将如下内容添加到每台主机的/etc/hosts来模拟实现:

    192.168.9.126 head1.parrot
    192.168.9.127 head0.parrot
    192.168.9.128 data0.parrot
    

    上面的内容是按照文初的主机列表编辑的。如果园友的环境不一样,可以按需编辑。格式如:1.2.3.4 <fully.qualified.domain.name>
    配置完后,可以相互ping一下FQDN看看是否可以正常解析。

    注意,要保留127.0.0.1 localhost这个配置

    配置无密码访问

    这一步要设置安装Ambari的机子与集群其它机器之间的无密码SSH访问
    原则上HDP集群要求SSH访问使用root账户,但是Ubuntu系统默认不启用root账户。我们可以将我们的普通账户设为无需密码使用sudo来代替使用root账户。
    配置如密码访问的方式到处可见,这里简单的列出几条命令:
    在Ambari主机上依次执行如下命令:

    ssh-keygen
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    ssh hystar@head0.parrot 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    ssh hystar@data0.parrot 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    ssh hystar@head0.parrot 'chmod 600 .ssh/authorized_keys'
    ssh hystar@data0.parrot 'chmod 600 .ssh/authorized_keys'
    

    执行这些命令时,连接远程主机是需要输入密码的,执行之后可以再尝试连接远程主机ssh hystar@head0如果不需要输入密码说明配置成功。

    由于我们后续需要在Ambari Server主机上安装Ambari Agent,所以我们对Ambari Server所在的主机本身对自己也配置了无密码SSH访问。

    离线安装准备

    为了可以离线安装,我们下载Ambari和HDP(以及HDP-Utils)的"tarball"包,下载地址参见此文档,下载后我们得到如下三个文件:

    • ambari-2.5.0.3-ubuntu16.tar.gz
    • HDP-2.6.0.3-ubuntu16-deb.tar.gz
    • HDP-UTILS-1.1.0.21-ubuntu16.tar.gz

    下载完成后建议验证下MD5确保文件未损坏

    然后我们需要配置一台Web服务器作为apt-get的源,用来提供安装所需要的deb包。
    由于楼主是在本地虚机安装HDP,本打算使用IIS作为Web服务,但IIS对于提供普通的文件有个麻烦的地方,就是如果扩展名没有注册,会由于MINE类型未知而报403错误。
    接着为了方便,用IIS集成的FTP,虽然倒是成功了,但是速度极慢,StackOverflow上网友说的原因是每次FTP访问身份验证消耗了太多的时间。
    然后想到了WSL,这个应该是最方便的途径。使用sudo apt-get install nginx给BashForWindows安装Nginx。注意需要停掉Windows中的W3SVC服务WSL中的Nginx才能启动成功。而且这个WSL中的Nginx需要每次进入bash后使用service nginx start启动。
    然后把ambari-2.5.0.3-ubuntu16.tar.gz解压到本地磁盘,然后使用ln -s创建一个软连接挂到Nginx默认发布目录:

    sudo ln -s /mnt/d/HDP/ambari-2.5.0.3-ubuntu16/ambari /usr/share/nginx/html/ambari

    这样http://localhost/ambari可以发布包文件。

    在Windows防火墙中手动添加80端口的入站规则。只是启用自带的万维网服务这个预定义的规则是不够的。

    接着,在之前下载tarball的页面下载两个用于apt的list文件:

    • ambari.list
    • hdp.list

    修改其中的地址为我们自己搭建的服务器的地址,注意把目录层级弄对就可以了。
    将ambari.list中原来的地址改为(IP地址为Windows系统的IP):
    http://192.168.9.222/ambari/ubuntu16/
    将修改后的ambari.list文件添加待安装Ambari Server的主机的/etc/apt/sources.list.d下。

    如果是在线安装,无需修改ambari.list内容,直接将其添加到/etc/apt/sources.list.d下即可。

    按照类似的方法,使用如下两条命令配置HDP和HDP Utils包的发布

    sudo ln -s /mnt/d/HDP/HDP-2.6.0.3-ubuntu16-deb/HDP /usr/share/nginx/html/hdp
    sudo ln -s /mnt/d/HDP/HDP-UTILS-1.1.0.21-ubuntu16/HDP-UTILS-1.1.0.21/repos /usr/share/nginx/html/hdputils
    

    这样HDP和HDP Utils包源分别位于http://192.168.9.222/hdp/ubuntu16http://192.168.9.222/hdputils/ubuntu16

    安装Ambari

    保证准备工作进行正确。首先执行下面命令导入key:

    sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
    

    然后执行更新:

    sudo apt-get update
    

    后续我们需要在所有主机上由此Ambari源安装Ambari Agent,所以我们需要在所有主机上执行这两条命令,以便Ambari Agent可以顺利安装。
    sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
    sudo apt-get update

    使用下面的命令检查update是否成功,即包信息是否已经被缓存。

    apt-cache showpkg ambari-server
    apt-cache showpkg ambari-agent
    apt-cache showpkg ambari-metrics-assembly
    

    如果一切正常,就可以开始安装Ambari了。

    sudo apt-get install ambari-server
    

    Ambari所依赖的PostgreSQL将一并被安装。

    配置Ambari

    执行sudo ambari-server setup配置Ambari。
    遇到Customize user account for ambari-server daemon选择n,使Ambari在root下执行,当然也可以选择其它用户。
    然后输入数字,选择要安装的JDK版本并等待下载安装完成。
    Enter advanced database configuration选择n来使用内置数据库。
    如无意外,安装会成功完成。

    启动Ambari

    使用如下命令,控制Ambari的启停

    sudo ambari-server start
    sudo ambari-server status
    sudo ambari-server stop
    

    创建集群

    Ambari启动后可以访问http://head1.parrot:8080登录到Ambari,默认用户名和密码为admin/admin。

    登录Ambari后点击Launch Install Wizard按钮,进入Ambari集群安装向导。
    安装Ambari集群步骤如下:

    1. 给集群命名,名称不能包含特殊字符
    2. 选择要安装的版本。由于我们选择离线安装,所以选择Use Local Repository并把不需要的系统配置移除,并在需要的系统配置中填入包源地址。对于之前的配置,HDP与HDP Utils的地址分别为:
    http://192.168.9.222/hdp/ubuntu16
    http://192.168.9.222/hdputils/ubuntu16
    
    1. 第三步是安装选项,目标主机的FQDN列表如下:
    head1.parrot
    head0.parrot
    data0.parrot
    

    然后在Ambari Server主机上执行cat ~/.ssh/id_rsa将私钥的文本粘贴到对应的文本框中,并在ssh用户名中填入我们的远程连接所用的用户名
    点击Register and Confirm,Ambari开始在所选的主机上安装Ambari Agent。

    1. 进入这一步后,将自动开始在集群的机子上安装Ambari Agent。等Progess停止走动时,Status一列将显示执行结果。Success表示成功完成。如果不幸遇到失败可以点击连接查看日志找到失败原因。
      在一切成功的情况下也有可能会出现一些警告,点击链接Click here to see the warnings,里面会告诉你怎么修复警告,如图。

    按照说明解决警告后,可以点击Return Checks重新检查。待检查无误后进入下一步

    博主并不是在Ambari Server或集群中任何一台机子上登录的Ambari控制台,它们都是无界面的Linux。楼主使用Windows上的Firefox登录Ambari控制台。
    第一次尝试时,楼主使用http://192.168.9.126:8080访问,到这一步时始终无法正常安装Ambari Agent。报错类似Registration failed. Unable to register with the server原因就是主机连不上Ambari Server。对于这个问题十分不解,之前所有主机的/etc/hosts都配置了啊。后来一番查找无果后,考虑是不是和访问Ambari控制台的机子的有关,遂把上面的hosts记录也加到Windows一份。同时为了保险,把Windows的hosts记录也加到HDP集群中每台主机的/etc/hosts(这个可能没有必要)。然后使用http://head1.parrot:8080访问Ambari控制台,重试上面的安装步骤,一切顺利完成。

    1. 这一步选择要在集群中安装的组件
    2. 接着是选择所选服务Master的安装位置。按照之前的配置,原则上它们都应该安装在head0.parrot结点。
      从下拉列表选择服务要部署的host位置,点击服务后面的“加号”可以增加服务部署的机子。而“减号”用来减少部署的机子。
      把SNameNode和NameNode放在不同的host上实现高可用,最终楼主的选择如下:

    YARN的ResouceManager的HA需要在安装完成后配置,具体实现见HortonWorks官网文档

    1. 然后选择所选服务Slave及Client的安装位置。按照之前的配置,Slave应该安装在data0.parrot结点。
      另外,我将Client安装在head1.parrot

    这一步host后面的星号表示这台host已经安装了Master,将鼠标移到星号上可以看到该host已安装的Master。

    1. 这一步将对每个服务的配置项进行设置,如数据存储位置,密码等。所有标签被标记为红色的都是必须输入的项。
      设置完成后点击Next,进行下一步之前会检查所输入的设置项并给出一些建议,修改后重试,或者直接点击Proceed Anyway忽略警告继续安装。

    一般来说标记为红色必填的都是需要输入密码的配置项。对于非生产的测试环境,可以把所有密码统一设置方便使用。

    1. 这一步汇总一个检查清单,列出了即将进行的部署的详情。这是部署前最后修改设置的最后机会。
      点击Deploy开始部署。下面就是耐心等待进度条完成。

    2. Ambari Server开始在3台host上安装服务并在安装完成后尝试启动。(如果遇到启动不成功,可以后面调整配置重试启动,如果是安装不成功就需要清理文件重试安装了,后者比较麻烦)

    提示

    1. 楼主按照上面的方法安装完成后,Hive启动不了(组件中的HiveServer2无法启动)。日志显示是MySQL无法连接。楼主选择Hive使用集成的MySQL作为MetaStore,两者安装在同一台主机上,按理应该没有问题。但Ambari Server和它们不在一台主机。楼主想了半天,只可能是这个原因,于是找到MySQL的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf将其中bind-address=127.0.0.1注释掉,自此HiveServer2可以正常启动。
    2. 启动时,最好先启动ZooKeeper。在ZooKeeper不启动的情况下,ResourceManager等无法启动。
    3. 默认配置下,主机重启后,所有服务都是处于停止状态(Ambari Server默认可以自行启动)。在Admin选项卡Service Auto Start菜单中可以配置哪些服务自动启动。

    运行.NET Core编写的MR Job

    首先准备好用.NET Core编写的Map和Reduce程序,源码见此,请自行下载编译。
    解决方案中的NetCoreMapperNetCoreReducer分别对应Map和Reduce程序,使用publish.bat生成项目得到输出,最终两个项目的输出文件有如下这些:

    然后准备输入文件davinci.txt(这个测试数据是HDInsight官方例子中的测试数据,就是一篇英文文章,可以自己随意制作一个)与之前生成的.NETCore程序,均拷贝到head0.parrot主机中

    为了方便WSL访问集群中的主机,首先配置WSL的hosts,目前Windows10中的WSL基于Ubuntu所以hosts也位于/etc/hosts。编辑这个文件加入以下内容:

    192.168.9.126 head1.parrot
    192.168.9.127 head0.parrot
    192.168.9.128 data0.parrot
    

    接着配置下WSL到head0结点和data0结点的无密码访问

    ssh-keygen
    ssh user@head0.parrot 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    ssh user@head0.parrot 'chmod 600 .ssh/authorized_keys'
    ssh user@data0.parrot 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    ssh user@data0.parrot 'chmod 600 .ssh/authorized_keys'
    

    接着将输入数据和所有的.NET Core程序文件拷贝到集群中(head0结点的主机上)

    scp davinci.txt hystar@head0.parrot:/home/hystar
    ssh hystar@head0.parrot 'mkdir coreapp'
    scp publish/* hystar@head0.parrot:/home/hystar/coreapp
    

    然后将输入数据拷贝到HDFS中(程序文件不需要):

    useradd -g hdfs hystar
    hadoop fs -mkdir -p /user/hystar
    hadoop fs -put /home/hystar/davinci.txt /example/data/gutenberg/davinci.txt
    

    然后就是准备Hadoop Streaming执行的脚本
    首先找到Hadoop Streaming的jar包所在的位置。SSH到Hadoop的头结点所在主机head0.parrot,并执行下面命令

    find / -name "hadoop-streaming*" 2>/dev/null 
    

    按照之前所给出的HDP安装的文章,楼主的Hadoop安装于/usr/hdp/2.6.0.3-8/hadoop-mapreduce/hadoop-streaming-2.7.3.2.6.0.3-8.jar
    接着是脚本内容:

    hadoop jar  /usr/hdp/2.6.0.3-8/hadoop-mapreduce/hadoop-streaming-2.7.3.2.6.0.3-8.jar  
    -files "/home/hystar/coreapp" 
    -mapper "dotnet coreapp/NetCoreMapper.dll" 
    -reducer  "dotnet coreapp/NetCoreReducer.dll" 
    -input /example/data/gutenberg/davinci.txt 
    -output /example/data/StreamingOutput/wc.txt
    

    注意files选项直接给出.NETCore App所在的文件夹(主机目录,而非HDFS目录),而不用逐个指定文件。

    mapper及reducer选项中的coreapp/这个路径也不能省。

    最后提交任务前,还需要在干活的结点(data0.parrot)安装.NET Core。同样在WSL中ssh到data0.parrot安装即可。
    安装前注意删除旧版,详细文档见此

    一切准备妥当,执行脚本就可以提交并运行基于Hadoop Streaming的任务。一些顺利的话,可以在/example/data/StreamingOutput/wc.txt/part-0001中看到结果。

    附录

    Ambari相关
    http://192.168.9.126:8080/api/v1/hosts 查看Ambari Server管理的主机,即安装了Ambari Agent的主机。

  • 相关阅读:
    用VC编译lua源码,生成lua语言的解释器和编译器
    vs如何在C++中调用Lua
    打印页面 订单号生成 条形码
    关于 打印页面 图片被截断
    easyui numberbox输入框 编辑不可编辑的切换
    点击空白处--某个div 消失
    easyui扩展行默认展开 以及 去除滚动条
    eayui grid 每一页的行号都是从1开始
    js中的this--执行上下文
    easyui grid 本地做分页
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/6908593.html
Copyright © 2020-2023  润新知