最近,因为课程设计需要在Ubuntu上安装Hadoop。本人使用的是Ubuntu kylin 16.04,安装Hadoop2.7.4。安装过程都是参考别人的博客,自己一步一步摸索过来的。如果您在安装的过程中遇到了什么问题,请多自己查阅网上资料,毕竟每个人会遇到的问题可能是不一样的。
一、安装JDK
Hadoop 2.7及更新版本需要JAVA 7支持,本人安装的是Oracle jdk1.8_151为例。
-
到Oracle官网下载jdk1.8_151
Java SE Development Kit 8 Downloads,点击jdk-8u151-linux-x64.tar.gz进行下载。
-
解压jdk-8u151-linux-x64.tar.gz
$ tar -zxvf jdk-8u77-linux-x64.tar.gz
- 将解压后的 jdk1.8.0_151放到/usr/local/jdk目录
进入/usr/local目录并创建/usr/local/jdk文件夹:
$ cd /usr/local
$ sudo mkdir /usr/local/jdk
将解压后的 jdk1.8.0_151放到/usr/local/jdk目录:
$ cp -rf jdk1.8.0_151 /usr/local/jdk
- 配置jdk环境变量
本人配置环境变量一般喜欢更改/etc/profile和~/.bashrc两个文件:
更改/etc/profile,使用如下命令:
$ sudo gedit /etc/profile
在弹出来的记事本文档末尾添加以下内容:
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_151
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使/etc/profile中的jdk环境变量生效:
$ source /etc/profile
对~/.bashrc的操作,如同/etc/profile:
$ sudo gedit ~/.bashrc
$ source ~/.bashrc
- 测试jdk是否安装成功
使用如下命令,检查jdk是否安装成功:
$ java -version
如果安装成功,会出现jdk的版本信息,如下图:
二、新建hadoop用户,配置ssh
① 安装ssh
使用以下命令安装ssh:
$ sudo apt-get install ssh
$ sudo apt-get install rsync
② 创建hadoop用户
- 使用以下命令,新建hadoop用户
$ adduser hadoop
需要为hadoop用户设置密码,建议输入一个自己方便记忆的密码。
注意:需要为hadoop 用户添加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题!
$ sudo adduser hadoop sudo
- 配置SSH
切换到hadoop用户,生成ssh密钥:
$ su - hadoop
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
- 测试ssh
以hadoop用户连接localhost,是否能够登录上本机:
$ ssh localhost
会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。
退出登录使用如下命令:
$ exit
注意:后续操作全部在hadoop用户下
三、伪分布式安装Hadoop2.7.4
① 下载和初始化Hadoop2.7.4
- 下载Hadoop
Hadoop2.7.4下载地址:Index of /apache/hadoop/common/hadoop-2.7.4,点击hadoop-2.7.4.tar.gz 进行下载。
解压hadoop2.7.4,并放到对应目录:
$ tar zxvf hadoop-2.7.4.tar.gz
$ sudo mv hadoop-2.7.4 /usr/local/hadoop
- 初始化Hadoop
查看jdk安装路径:
$ realpath /usr/bin/java
得到以下内容:
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
记录下jdk安装路径:
/usr/lib/jvm/java-8-openjdk-amd64
- 为hadoop-env.sh设置jdk环境变量
编辑hadoop-env.sh:
$ cd /usr/local/hadoop
$ nano etc/hadoop/hadoop-env.sh
修改
export JAVA_HOME=${JAVA_HOME}
为:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 测试Hadoop是否初始化成功
$ bin/hadoop
会得到hadoop命令的使用说明,如下图所示,则上述安装正确。
② 配置DFS(伪分布模式安装第一个配置)
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
- 修改配置文件etc/hadoop/core-site.xml
编辑etc/hadoop/core-site.xml:
$ nano etc/hadoop/core-site.xml
配置为:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
- 修改配置文件etc/hadoop/hdfs-site.xml
编辑etc/hadoop/hdfs-site.xml:
$ nano etc/hadoop/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/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 格式化HDFS
$ bin/hdfs namenode -format
- 启动NameNode和DataNode,测试DFS配置是否成功
$ sbin/start-dfs.sh
在浏览器中访问http://localhost:50070/,可以看到NameNode相关信息。也可以通过jps命令查看:
$ jps
查看结果如下图所示:
要关闭 Hadoop,则运行:
$ sbin/stop-dfs.sh
- 运行示例程序grep
单机模式中,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/hadoop
$ bin/hdfs dfs -mkdir input
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
$ bin/hdfs dfs -put ./etc/hadoop/*.xml input
复制完成后,可以通过如下命令查看文件列表:
$ bin/hdfs dfs -ls input
文件列表如图所示:
运行grep:
$ bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar grep input output 'dfs[a-z.]+'
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
$ bin/hdfs dfs -cat output/*
运行结果如下:
如果程序运行正常,且输出正确,则以上配置成功。
③ YARN配置(伪分布模式安装第二个配置)
- 修改配置文件 mapred-site.xml
对etc/hadoop/mapred-site.xml.template进行重命名:
$ mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
修改etc/hadoop/mapred-site.xml,可以使用gedit进行编辑:
$ gedit etc/hadoop/mapred-site.xml
配置为:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改配置文件 yarn-site.xml
使用gedit进行编辑:
$ gedit etc/hadoop/yarn-site.xml
配置为:
<configuration>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>
- 启动YARN
$ sbin/start-yarn.sh # 启动YARN
$ sbin/mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况
开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程,如下图所示。
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster,如下图所示。
关闭 YARN 的脚本如下:
$ sbin/stop-yarn.sh
$ sbin/mr-jobhistory-daemon.sh stop historyserver
④ 为Hadoop配置环境变量
同为jdk配置环境变量一样,本人会同时更改/etc/peofile和~/.bashrc两个文件:
更改/etc/profile,使用如下命令:
$ sudo gedit /etc/profile
在弹出来的记事本文档末尾添加以下内容:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
使/etc/profile中的jdk环境变量生效:
$ source /etc/profile
生效后,在任意目录中,都可以直接使用 hdfs 等命令了,执行以下命令查看 HDFS:
$ hdfs dfs -ls input
hdfs dfs -ls input
~/.bashrc的操作,如同/etc/profile:
$ sudo gedit ~/.bashrc
$ source ~/.bashrc