大数据开发利器:Hadoop(2)
来源:互联网 发布:中小型外贸企业数据 编辑:程序博客网 时间:2024/05/04 10:54
大数据开发利器:Hadoop(2)
1. 准备工作
本文软件配置:
- VW12.5
- CentOS release 6.8 64位 lsb_release -a
- JDK 1.7.0_25 64位 java -version
- Hadoop 2.7.3 hadoop version
1.1 使用VW安装CentOS
这步骤网络教程较多,不在过多讲解。注意以下几点:
- 如果内存小于或等于4G,推荐双系统安装,内存大于4G,可使用虚拟机安装。
- 虚拟机设置过程中注意内存分配、客户机操作系统选择(本文选择CentOS64位)
- 安装过程中注意Root密码设置、硬盘分区、软件安装等。初次安装建议设置用户名为hadoop,下面就不用再添加hadoop用户了。
顺便吐槽一下,CentOS 6.8默中文字体非常丑,建议安装完成之后选择系统->首选项(Preferences)->外观(Appearance)修改一下。
1.2 修改主机名和用户名
为了统一开发环境,这里需要修改主机名和用户名。
① 添加用户
sudo useradd -m hadoop -s /bin/bash # 添加以hadoop为用户名的用户sudo passwd hadoop # 设置密码
这里需要输入root密码。
② 修改当前主机名
hostname # 查看当前主机名 vim /etc/syconfig/network # 使用Vim修改配置文件,但也可以使用类似windows的记事本gedit,操作简单一些 hostname hadoop
第二步中修改HOSTNAME=hadoop
设置完成之后,注销当前用户,使用刚刚创建的hadoop用户登录。
1.3 配置网卡
① 进行配置
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改如下:
DEVICE=eth0 # 默认,物理设备名HWADDR=00:0C:29:23:83:95 # 默认,MAC地址TYPE=Ethernet # 默认UUID=xxxxx # 默认,全局统一标识符ONBOOT=yes # 修改,[yes|no] 引导时是否激活网卡NM_CONTROLLED=yes # 默认BOOTPROTO=dhcp # 默认,[none|static|bootp|dhcp] (引导时不适用协议|静态分配|Bootp协议|DHCP协议)
设置BOOTPROTO参数为dhcp是由于虚拟机采用NAT方式。
修改完成之后,重启网络服务,并测试是否能上网。
② 测试连接
service network restartping www.baidu.com
③ 修改hosts
vim /etc/hosts
在下面增加一行: ip地址 主机名
ip地址使用命令 ifconfig查看
例如:127.0.0.1 hadoop
1.4 配置SSH无密码连接
Hadoop并不是通过SSH协议进行数据传输,Hadoop仅仅时在启动和停止的时候需要主节点通过SSH协议将从节点上面的进程启动或停止。即不配置SSH对Hadoop的使用没有任何影响,只需要在启动和停止Hadoop的时候输入每个从节点的用户名的密码就行了,但是一旦集群的规模增大,这种方式不可取同时也不利于学习和调试。
① 在配置SSH无密码连接之前,先关闭防火墙。
service iptables stop chkconfig iptables off #永久关闭防火墙vim /etc/selinux/config
设置SELINUX=disabled
(原来为enforcing)
此步存疑,我使用该版本时未关闭但仍可完成安装并启动。不过大部分教程均提到,所以设置一下也无妨。
② 检查SSH是否安装
CentOS一般附带了SSH,所以首先检查一下是否安装。
sudo service sshd restartrpm -qa | grep opensshrpm -qa | grep rsync
如果已经安装好SSH和rsync(一个远程数据同步工具,可通过LAN/WAN快速同步多台主机的文件),将会如下图所示。
当然,如果没有安装,使用如下命令进行安装。
sudo yum install openssh-clientssudo yum install openssh-server
安装完成之后使用上面的方法进行验证。
④ 测试ssh是否可用
ssh localhost
首次登录,输入yes
和用户密码。
这样每次都需要输入密码,所以配置相应的SSH无密码登录更方便一些。
exit # 退出刚才的ssh localhostcd ~/.ssh/ #ssh localhost之后会自动生成ssh-keygen -t rsacat id_rsa.pub >> authorized_keys #加入授权chmod 600 ./authorized_keys
如下图所示:
此时,再次输入ssh localhost命令,无需输入密码即可直接登录。如下图:
1.5 JAVA环境安装
CentOS一般预装了OpenJDK
,这里我使用Oracle JDK
。
① 卸载OpenJDK
rpm -qa | grep jdk # 查看是否安装OpenJDKsudo yum -y remove xxx # 这里的xxx是上一个命令返回的结果
② 安装OracleJDK
下载JDK包
这里在JAVA官网上下载tar包。目前可以下载1.8版本,本文使用1.7版本。解压JDK包
将tar包放置在/usr/local/
目录下,并进行解压。(Linux 目录规则)
sudo tar -xvzf jdk-7u25-linux-x64.tar.gz # 解压rm -f jdk-linux-* #删除压缩包
- 配置环境变量
vim ~/.bashrc
.bashrc
只对单个用户生效,当登录以及每次打开新的shell时,该文件被读取。衍生阅读:设置Linux环境变量的区别
export JAVA_HOME=/usr/local/jdk1.7.0_25export PATH=$PATH:$JAVA_HOME/bin
修改环境变量后,执行命令。让环境变量立即生效。
source ~/.bashrc
- 检查一下是否配置成功
java -version
若如下图所示,则说明该配置成功。
2 伪分布式安装Hadoop 2.0
2.1 安装和配置
① 下载Hadoop2.0
在Hadoop官网上下载Hadoop binary版本。下载某个版本时有两种类型:source和binary。Source是源代码,而binary是编译好的。
下载时建议也下载hadoop-2.x.y.tar.gz.mds这个文件,用于检查hadoop-2.x.y.tar.gz的完整性。
cat hadoop-2.7.3.tar.gz.mds | grep 'MD5'md5sum hadoop-2.7.3.tar.gz | tr "a-z" "A-Z" # 计算机MD5值,并转化为大写,方便比较。
查看输出的两个值,如果存在差异,重新下载。如下图:
② 解压tar包
将hadoop安装在/usr/local目录下。
tar sudo tar -xvzf hadoop-2.7.3.tar.gz# 这里可以改名或者做一个软连接,任选一种或不选sudo mv hadoop-2.7.3 ./hadoop #方式1:改名ln -s hadoop-2.7.3 hadoop # 方式2:软连接sudo chown -R hadoop:hadoop hadoop #更改权限
③ 设置环境变量
vim ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop-2.7.3export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
source ~/.bashrc # 使配置立即生效
④ 配置Hadoop配置文件
- hadoop-env.sh
这个文件配置hadoop的环境,比如namenode
的大小等,由于属于初学阶段,暂时不必修改。
- core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop-2.7.3/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property></configuration>
hadoop.tmp.dir
临时文件目录。
fs.defaultFS
网页访问端口号
- hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property></configuration>
dfs.replication
设置HDFS文件副本数。
dfs.namenode.data.dir
设置NameNode的元数据存放的本地文件路径。
dfs.datanode.data.dir
设置DameNode的元数据存放的本地文件路径。
如果需要使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,就需要设置dfs.webhdfs.enabled
为true,因为这些信息都是由namenode来保存的。
- mapreduce.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop:19888</value> </property></configuration>
mapreduce.jobhistory.address
配置jobhistory Server地址。 mapredcue.jobhistory.webapp.address
配置jobhistory server web UI地址。
- yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>resourcemanager.address</name> <value>hadoop:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop:8031</value> </property> <property> <name>resourcemanager.admin.address</name> <value>hadoop:8033</value> </property> <property> <name>resourcemanager.webapp.adress</name> <value>hadoop:8088</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property></configuration>
yarn.nodemanager.aux-services
:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序 resourcemanager.address
:ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。 yarn.resourcemanager.scheduler.address
:ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 yarn.resourcemanager.resource-tracker.address
:ResourceManager对NodeManager暴露的地址.。ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。通过该地址向RM汇报心跳,领取任务等。 resourcemanager.admin.address
:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。 resourcemanager.webapp.adress
:ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。 yarn.log-aggregation-enable
如果配置错误,会显示 Aggregation is not enabled. Try the nodemanager at IP:HOST
。
- slaves
# 默认为一个节点localhost
⑤ 配置完成之后,执行NameNode初始化
hadoop namenode format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。如下图:
2.2 启动和测试hadoop
① 启动Hadoop
start-all.shjps #判断是否启动成功
其中,若成功启动会列出如下进程:NameNode、DataNode、SencondarNameNode(以上HDFS进程)、ResourceManager、NodeManager(以上两项为YARN进程)。
若SencondarNameNode未启动,使用stop-dfs.sh
关闭进程,然后尝试再次启动。如果没有NameNode或DataNode,则配置不成功,检查之前步骤,或通过启动日志排查原因。(查看logs目录下的log文件)
可能原因之一是多次format,将share/dfs目录下文件删除,重醒format。
stop-all.sh #关闭命令
② 访问Web页面
可以访问http://localhost:50070查看NameNode和DataNode信息。
访问http://localhost:8088查看任务的运行情况(需要启动YARN)。
以下命令启动历史服务器,可以在web下查看任务运行。
mr-jobhistory-daemon.sh start historyserver # 启动jobhistoryyarn-damon.sh start historyserver #启动ApplicationHistoryServer
访问http://localhost:19888查看jobhistory的运行情况。
2.3 运行Hadoop伪分布式实例
以一个MapReduce作业来实现单词计数的功能。
① 首先,创建相应的文本文件
# start-all.sh cd ~touch wordsecho "data mining on data warehouse" >> words # 写入相同的两行语句cat words
那么可以直观的发现,单词统计的结果为:
② 将文件上传到HDFS的指定目录下
hadoop fs -mkdir /input #在HDFS根目录下创建/input文件夹hadoop fs -ls / #查看目录是否创建hadoop dfs -put words /input #将文本文件上传到该目录下。
如下图:
③ 运行MapReduce程序,并查看结果
cd /usr/local/hadoop-2.7.3hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /outputhdfs dfs -cat /output/part* # 查看结果
可以发现结果与预期相同。
④ 其他一些命令
hdfs dfs -get /output/part* output# 将结果取回本地,并命名为outputhdfs dfs -rm -r /output # Hadoop 运行程序时,输出目录不能存在,因此若要重新运行程序,需要删除结果目录
可访问http://localhost:8088查看任务运行情况,如下图:
⑤ 备注
start-dfs.sh #仅启动NameNode和DataNodestart-yarn.sh # 启动Yarn
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况。
如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。
3. 总结
本节主要介绍了如何在CentOS上安装Hadoop2.0。基本完成了操作,但由于使用NAT模式和代理,虚拟机中配置静态IP方式不成功(无法ping通外网)。所以后续操作中直接访问http://IP地址:端口号
的方式不成功。原因未知。
参考资料:
- 范东来-Hadoop海量数据处理-技术详解与项目实战。
- 林子雨-大数据技术原理与应用
- 网易云课堂
- 大数据开发利器:Hadoop(2)
- 大数据开发利器:Hadoop(1)
- 大数据开发利器:Hadoop(3)
- 大数据开发利器:Hadoop(4)
- 大数据开发利器:Hadoop(5)-HBase第二讲
- 大数据开发利器:Hadoop(7)MapReduce进阶
- 大数据开发利器:Hadoop(9) HBase进阶第2讲 HBase过滤器
- 大数据开发利器:Hadoop(6)-HBase第三讲 Java 开发基础
- 大数据-开发利器
- 大数据-开发利器
- 大数据-开发利器
- 大数据开发利器:Hadoop(8) HBase进阶第1讲 HBase API使用
- 大数据开发利器:Hadoop(10) HBase进阶第3讲 批量插入Bulkload
- 大数据开发利器:Hadoop(11) Hadoop2 HA(High Availability)
- 大数据云计算的利器hadoop介绍
- 大数据利器
- hadoop 大数据开发2---Zookeeper 安装步骤
- 大数据(一)--Hadoop
- 加上事务aop后项目启动报错解决方法参考
- 安卓基础_1
- [kuangbin带你飞]专题四 最短路练习 M POJ 1062
- Spring 的各个知识点 -- Spring基础
- 整理框架
- 大数据开发利器:Hadoop(2)
- vs2013 配置 freeglut3.0(opengl的窗口系统库)
- gradle编译速度慢的解决办法—freeline的使用
- Spring MVC 系统异常处理
- 交易咖---论盘感是怎么来的
- 安卓基础_2
- 【miscellaneous】硬解码与软解码
- ionic之创建列表
- Notes on Computer Organization and Architecture