Hadoop伪分布单节点环境搭建
1.前提准备工作“两步”流程
-
- 安装虚拟机ubuntu
- 安装ubuntu系统
2.Hadoop伪分布单节点环境搭建的“三步”总流程
- JDK安装
- SSH配置
- Hadoop环境配置
-
前提准备工作“两步”流程
1.1安装虚拟机ubuntu
1.
2.
3.
4.我的linux操作系统是ubuntu64位的,因此选择ubuntu64位
5.名称与存放位置
6.
7.
8.
9.
10.
11.虚拟磁盘存储为单个文件就行
12.
13.进入自定义硬件选择系统文件
14.点击浏览选择系统文件
1.2安装ubuntu系统
1.
2.直接继续
3.
4.
5.
6.
7.
8.这个界面正在安装中,等安装完重启即可。
9.重启
- Hadoop伪分布单节点环境搭建的“三步”总流程
2.1 JDK安装
- 检测jdk是否已经安装
java -version
- 并未安装,切换到usr/,创建java/目录
cd /
ls
cd usr/
mkdir java
cd java/
ls
- 将用u盘拷贝的jdk安装包 复制到/usr/java
cp /home/hadoop/jdk/jdk-8u144-linux-x64.tar.gz /usr/java
ls
- 对安装包jdk-8u144-linux-x6tar.gz进行解压
tar zxvf jdk-8u144-linux-x64.tar.gz
ls
- Jdk的环境变量配置
sudo gedit ~/.bashrc
在打开的文件的末尾添加以下信息:
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 使用source命令来使刚才的jdk环境变量配置文件生效
source ~/.bashrc
- 配置hosts文件,添加hostname与ip间的关系,方便以后的访问。
- 首先,ifconfig查看ip
apt install net-tools(如果没有联网,则去网上下载net-tools安装包,进行安装。)
安装成功后再输入命令ifconfig,查看ip为192.168.108.129
- vi /etc/hosts修改hosts文件
192.168.108.129 cnq
以:wq保存退出
- 准备hadoop专用用户和组
groupadd hadoop 创建hadoop用户组
adduser hadoop 创建hadoop用户
adduser hadoop hadoop将用户hadoop添加到hadoop组中
因为我一开始时创建的用户是hadoop,所以已经存在,且已创建组,所以,这一步我只需要将用户添加到组就行
- 查看防火墙是否开启,如果开启,则关闭
ufw status 查看防火墙状态
ufw disable关闭防火墙
2.2 SSH配置
- 配置SSH实现无密码验证配置,首先切换到刚创建的hadoop用户下。由于hadoop需要无密码登录作为datanode的节点,而由于部署单节点的时候,当前节点既是namenode又是datanode,所以此时需要生成无密码登录的ssh。方法如下:
su hadoop
cd
pwd
- 创建.ssh目录,生成密钥
mkdir .ssh
ssh-keygen -t rsa(连续三次回车)
- 切换到.ssh目录下,进行查看公钥和私钥
cd .ssh
ls
- 将公钥复制到日志文件里,查看是否复制成功
cp id_rsa.pub authorized_keys
ls
- 查看日记文件具体内容
vi authorized_keys
- 返回到/home/Hadoop/,来赋予权限
cd ..
pwd
chmod 700 .ssh 将.ssh文件夹的权限赋予700
chmod 600 .ssh/* 将.ssh文件夹中的文件服务600
- 切换到root用户下,安装ssh插件(openssh)
su root
sudo apt-get install openssh-server
.
- 切换到/home/Hadoop/,测试ssh无密码访问
su hadoop
ssh localhost
yes
2.3 Hadoop环境配置
接下来,搭建hadoop伪分布式环境
下载并解压Hadoop2.2.0,把文件放到/usr/java/目录下,注意:下载前确认一下你的Linux系统是64位系统还是32位系统,分别下载对应的版本,如果下载错了,后面会有很多问题。
- 首先,切换到/usr/java/ ,再切换到root用户下,再 /root/java
cd /usr/java
su root
- 将用u盘拷贝的hadoop安装包 复制到/usr/java,并解压
cp /home/hadoop/hadoop/hadoop-2.7.4.tar.gz /usr/java
tar zxvf hadoop-2.7.4.tar.gz
- 将文件名hadoop-2.7.4改为hadoop
mvhadoop-2.7.4hadoop
ls
- 将刚改名的hadoop文件,权限赋给hadoop用户
chown -R hadoop:hadoop hadoop
ls -l(查看权限)
- 先创建hadoop数据目录,将整个data目录权限赋予给hadoop用户
mkdir -p /data/dfs/name
mkdir -p /data/dfs/data
mkdir -p /data/tmp
chown -R hadoop:hadoophadoop /data
- 修改hadoop对应的配置文件,切换到hadoop用户,再切换到hadoop目录
su hadoop
cd hadoop
- 查看etc/hadoop的配置文件
cd etc/
ls
cd hadoop/
ls
- 修改etc/Hadoop/core-site.xml配置文件,添加如下信息
vi core-site.xml
下面这里配置的是HDFS(hadoop)的分布式文件系统的地址及端口号
<property>
<name>fs.defaultFS</name>
<value>hdfs://cnq:9000</value>
</property>
下面配置的是HDFS路径的存放数据的公共目录
<property>
<name>hadoop.tmp.dir</name>
<value>file:/data/tmp</value>
</property>
下面配置的是,因为在hadoop1.0中引入了安全机制,所以从客户端发出的作业提交者全变成了hadoop,不管原始提交者是哪个用户,为了解决该问题,引入了安全违章功能,允许一个超级用户来代替其他用户来提交作业或者执行命令,而对外来看,执行者仍然是普通用户。所以
配置设为任意客户端
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
配置设为任意用户组
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
- 修改etc/hadoop/hdfs-site.xml配置文件,添加如下信息。
vi hdfs-site.xml
下面这是配置的是namenode文件目录
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/dfs/name</value>
<final>true</final>
</property>
下面这是配置的是datanode文件目录
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dfs/data</value>
<final>true</final>
</property>
下面配置的是数据块副本和HDFS权限
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
- 修改etc/Hadoop/mapred-site.xml配置文件,添加如下信息
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
配置的是mapreduce环境为yarn
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改etc/hadoop/yarn-site.xml配置文件,添加如下信息。
vi yarn-site.xml
为了能够运行mapreduce程序,我们需要让.nodemanger在启动时加载shuffle。所以需要下面设置
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 修改etc/hadoop/slaves,添加如下信息。即slaves文件
vi slaves
现在是伪分布式单节点集群,所以datanode和namedata在一个节点上。
修改为
- 总的是修改这6个配置文件
- 设置hadoop环境变量,切换到root用户下,修改/etc/profile文件
suroot
vi /etc/profile
export HADOOP_HOME=/usr/java/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
总结 : jdk环境变量配置是放在/etc/profile.d hadoop环境变量配置是放在/etc/profile
- 使配置文件生效
source /etc/profile
2.4 测试hadoop运行
- 切换到hadoop用户,退回到hadoop目录下
suhadoop
cd ..
cd ..
ls
- 格式化namenode
bin/hadoopnamenode -format
- 启动集群(出现异常)
sbin/start-all.sh
如果启动集群出现以下错误
进入到以下文件目录
cd /usr/java/hadoop/etc/hadoop
首先修改 hadoop-env.sh 文件
sudogedit hadoop-env.sh
在打开的文件中找到 JAVA_HOME 的位置,将等号右边的部分修改为jdk的安装目录(也可以是用“#”将这段注释掉,重新写)
- 启动集群(正常)
sbin/start-all.sh
- 查看集群是否启动
jps
- 管理员身份运行记事本
- 打开本地的host文件
输入192.168.108.129 cnq
修改,进行保存
- 最后,现在是来验证hadoop是否安装成功。在Windows上可以通过 http://cnq:50070 访问WebUI来查看NameNode,集群、文件系统的状态。这里是HDFS的Web页面
http://cnq:50070
- 新建cnq.txt,用来测试,通过hadoop自带的wordcount程序来测试。
ls
vi cnq.txt
添加一些数据,如:
caonanqinghadoop
caonanqinghadoop
caonanqinghadoop
:wq保存退出
- 查看hdfs的文件目录
hadoop fs -ls / 查看
hadoop fs -mkdir /caonanqing 新建caonanqing目录
hadoop fs -ls / 查看
hadoop fs -put /usr/java/hadoop/cnq.txt /caonanqing 将/usr/java/hadoop/cnq.txt 输出到 /caonanqing
hadoop fs -ls /caonanqing 查看caonanqing目录
- 打开web页面,查看作业的动态情况
http://cnq:8088/cluster/apps
- 执行Hadoop自带的wordcount程序来测试运行下
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /caonanqing/cnq.txt /caonanqing/wordcount-out
解释下,/caonanqing/cnq.txt是输入路径,/caonanqing/wordcount-out是输出路径。share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar 是jar包名。
(bin/hadoop jar路径名称 mapreduce处于主方法的包名+类名 输入路径 输出路径)
作业进度加载完毕后,回到最初页面http://cnq:50070
以上都成功,那么hadoop单节点伪分布式运行环境便搭建好了。