参考书:
《基于Hadoop与Spark的大数据开发实战》,肖睿 丁科 吴刚山主编.
注意,当从此word文档复制命令时,可能由于word自动转换了字符(比如横线字符)而导致命令执行失败.所以,应该尽量不采用复制方式!
如果你是直接复制了这个客户机,则可以直接看”三,使用此客户机”.
一,安装说明
用于部署大数据环境和编程开发;
2019年9月18日星期二在32位Windows 2003 Server的VMWare workstation 9.0上新建此CentOS 6.10(Linux内核版本为2.6.32)的32位版客户机,使用的ISO是CentOS-6.10-i386-bin-DVD1.iso;
CPU:1个处理器(2逻辑内核);
内存:4GB;
启用了NAT网卡;
选了”用主机时间同步客户机时间”;
启动安装时,选”Install system with basic video driver”;(因为选第一项无法安装)
中文(简体);美国英语式键盘;
主机名:hadoop000;
设置了IPv4的IP;
root的密码是qwqwqw 。
软件选择:”Desktop”,选择”现在自定义”,”下一步”内选了:【基本系统】内增选了Perl,【开发】内增选了Eclipse,【数据库】内增选了MySQL数据库客户端和MySQL数据库服务器,【服务器】内增选了FTP服务器。(共1320个软件包,安装时间约13分钟);
重启后,按安装要求创建了常规用户hadoop(密码hadoop123);选了”在网络上同步日期和时间”(其会自动启动NTP服务);
去掉"启用kdump"前的勾。按要求重启。
以root登录。勾选不再显示警告窗口。
使用优盘共享文件成功:
fat32格式的优盘(假设名称是GOLD)连接宿主机之后,右击该客户机窗口右下角的DISK图标,点击“连接”。如果是在root的桌面环境下,则自动在桌面上即弹出优盘文件夹,其目录是/media/GOLD。
如果系统运行级别设置为了3,即是命令行模式,则可能# mount /dev/sdb /mnt ,即可从/mnt目录复制优盘上的文件到客户机。
安装VMware Tools成功(除了启用共享文件夹失败)。关机。
此时,该客户机冷启动到root桌面显示完毕,约耗时100秒。
可以Ctrl+Alt+Enter全屏幕;
可以在宿主机和客户机之间复制/粘贴字符串和文件。
查看已有的JDK:
其安装的Eclipse(3.6中文版)启动用时约1分钟,通过其”已安装的JRE”可见jdk安装目录是/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181 。
二,已做的更改:
1,禁止NetworkManager
# service NetworkManager stop
# chkconfig NetworkManager off
2,停止iptables,禁止其自启动
# service iptables stop
# chkconfig iptables off
# service iptables status
3,禁止selinux:
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# reboot
# sestatus
3,修改/etc/profile
尾部添加了:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181
export HADOOP_HOME=/root/app/hadoop-0.20.2
export PATH=$PATH:$JAVA_HOME/bin
4, 在/etc/hosts添加一行:
192.168.207.31 hadoop000
5,关机,重启。
三,使用此客户机
修改VmwareWorkstation的NAT网络的子网IP为192.168.207.0:
点击”编辑”的”虚拟网络编辑器”,单击类型为NAT模式的那一行,点击下方的”更改设置”按钮, 单击类型为NAT模式的那一行,修改底部的”子网IP(I)”为192.168.207.0,点击”确定”。
在VmwareWorkstation中打开客户机的.vmx文件;启动客户机时,选择”我已移动该客户机”。
登录屏幕点击“其他…”,输入用户名root和密码。。
对于此客户机,现在,你可以参考本文的Eclipse开发部分做hadoop开发了。
四,Eclipse开发:
点击”应用程序”à”编程”à”Eclipse”,启动eclipse 。
新建项目时,类型要选” MapReduce project”,这样就可以自动引用hadoop安装目录内的jar文件。剩余步骤同于普通java项目。
1, 运行Hadoop项目需先在Hadoop所在的客户机上启动Hadoop系统;
# cd $HADOOP_HOME
# bin/start-all.sh
# jps
注意,用jps命令看到以下进程都有,才是启动成功: NameNode, SecondaryNameNode, JobTracker, TaskTracker, DataNode。
注意,可能由于机器的卡顿而少启动了进程,只有靠重新启动来解决这种问题。
# bin/stop-all.sh
# bin/start-all.sh
2,运行项目或main方法所在类:运行方式选”Java 应用程序”.
参考:已做好的配置过程:
# whereis eclipse
eclipse: /usr/bin/eclipse /etc/eclipse.ini /usr/lib/eclipse /usr/share/eclipse
从结果中很容易找到eclipse安装目录是/usr/lib/eclipse.
复制$HADOOP_HOME/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar到
/usr/lib/eclipse/plugins
重启eclipse,如图在”窗口”菜单的”首选项”对话框内填写hadoop安装目录.
Map/Reduce Locations视图内填写正确信息
浏览”DFS Locations”,上传测试文件Necklace.txt
附录一,部署伪分布式hadoop0.20.2:
如果此客户机无/root/app/hadoop-0.20.2目录,则是已经删除.
下述是部署过程.
部署依据:hadoop-0.20.2.tar.gz内的docs目录的quickstart.pdf 。
(一)安装hadoop
tar –zxvf hadoop-0.20.2.tar.gz -C /root/app/
(二)配置配置文件
1)配置文件:
# cd /root/app/hadoop-0.20.2
# vi conf/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181
# 然后编辑3个xml文件,
# vi conf/core-site.xml
(该文件也会被用于Eclipse的” Map/Reduce Locations视图”的”Hadoop Location”的 “DFS Master”信息的填写(红字部分),对于伪分布式,注意使用的是localhost,而不要用IP)
# vi conf/hdfs-site.xml:
# vi conf/mapred-site.xml
(该文件也会被用于Eclipse的” Map/Reduce Locations视图”的”Hadoop Location”的 “Map/Reduce Master”信息的填写(红字部分))
2)ssh免密码登录localhost:
a)生成公/私密钥对:
# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
b)公钥添加到到授权文件内:
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
c) 免密码登录localhost:
# ssh localhost
第一次需要回答yes,此时无需输入root的登录密码则表明此步骤成功。
3)格式化/启动/测试:
注意,当从此word文档复制命令时,可能由于word自动转换了字符(比如横线字符)而导致命令执行失败.
# bin/hadoop namenode -format
19/04/09 22:14:11 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop000/192.168.207.31
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
19/04/09 22:14:11 INFO namenode.FSNamesystem: fsOwner=root,root
19/04/09 22:14:11 INFO namenode.FSNamesystem: supergroup=supergroup
19/04/09 22:14:11 INFO namenode.FSNamesystem: isPermissionEnabled=true
19/04/09 22:14:11 INFO common.Storage: Image file of size 94 saved in 0 seconds.
19/04/09 22:14:11 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
19/04/09 22:14:11 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop000/192.168.207.31
************************************************************/
# bin/start-all.sh
注意,用jps命令看到以下进程都有,才是启动成功: NameNode, SecondaryNameNode, JobTracker, TaskTracker, DataNode。
注意,可能由于机器的卡顿而少启动了进程,只有靠重新启动来解决这种问题。
# bin/stop-all.sh
# bin/start-all.sh
通过宿主机的浏览器可以访问该客户机的hadoop系统:
NameNode 'localhost:9000':
http://192.168.207.31:50070
Hadoop Map/Reduce Administration :
http://192.168.207.31:50030/
第一次测试示例程序:
# bin/hadoop fs -put conf input
# bin/hadoop fs -ls /user/root/input
Found 13 items
。。。。。。
# bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
用时约71秒。
# bin/hadoop fs -cat output/*
为了下一次的测试,删除hdfs上root的output
# bin/hadoop fs -rmr /user/root/output
停止hadoop:
# bin/stop-all.sh
(三)注意假失败:
1,发出的hadoop命令或程序也有可能卡顿将近十分钟后才开始执行,这与机器性能有关。
2,如果某个进程启动或停止失败,多做几次bin/start-all.sh 或stop-all.sh。
附录二,部署伪分布式Hbase 0.90.3的步骤:
如果此客户机无/root/app/hbase-0.90.3目录则是已经删除了Hbase.
1,编辑两个配置文件
# /root/app/hbase-0.90.3/conf
# vim hbase-env.sh
只改两处,原文件其余部分不变:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181
export HBASE_CLASSPATH=/root/app/hadoop-0.20.2/conf
# vim hbase-site.xml
只在configuration标签内加入内容,原文件其余部分不变:
2,修订jar文件
原因:HBase运行时要调用hadoop的jar文件,因此,这两个平台使用的jar文件必须匹配。
# cd /root/app/hbase-0.90.3/lib
# mv hadoop-core-0.20-append-r1056497.jar hadoop-core-0.20-append-r1056497.sav
# cp /root/app/hadoop-0.20.2/hadoop-0.20.2-core.jar .
# cd ..
# bin/start-hbase.sh
# jps
除了hadoop的5个进程外,必须有 HRegionServer,HMaster,HQuorumPeer 。
# cd /root/app/hbase-0.90.3
# bin/hbase shell
hbase(main):001:0> list
hbase(main):001:0> exit
# bin/stop-hbase.sh
# $HADOOP_HOME/bin/stop-all.sh
# shutdown -h now
附录三,常见问题
错误Name node is in safe mode的解决方法:将本地文件拷贝到hdfs上去,结果:Name node is in safe mode ,这是因为在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
可以通过以下命令来手动离开安全模式:
bin/hadoop dfsadmin -safemode leave
用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。