基于Ubuntu14.04.6单机伪分布式安装Hadoop2.7.1
- 前言
- 一、创建用户
- 二、安装配置SSH
- 三、安装Java环境
- 四、安装hadoop
- 五、hadoop伪分布式配置
- 运行实例
前言
上一篇blog介绍了多节点Linux集群的构造,本篇blog介绍基于单一节点Hadoop伪分布安装,有时间再尝试多节点Hadoop安装。Hadoop有三种安装模式,分别是:
- 单机模式:所有程序都在单个JVM上执行,不使用HDFS,主要用于调试MapReduce程序的应用逻辑。
- 伪分布模式:所有文件储存在单一节点上,所有的守护进程都运行在同一台机器上。
- 集群安装:存储采用分布式文件系统HDFS,而且,HDFS的名称节点和数据节点位于不同机器上。这时,数据就可以分布到多个节点上,不同数据节点上的数据计算可以并行执行,这时的MapReduce分布式计算能力才能真正发挥作用。
一、创建用户
添加一名“hadoop”用户,并给与管理员权限,方便系统的部署。
- 创建新用户hadoop
sudo useradd -m hadoop -s /bin/bash
- 设置密码,按照提示输入密码
sudo passwd hadoop
- 设置管理员权限
sudo adduser hadoop sudo
二、安装配置SSH
Ubuntu默认安装了SSH client,还需要安装SSH server。
sudo apt-get install openssh-server
安装后需要使用密码登录本机,先看下是否安装成功。
ssh localhost
每次登录要密码显然不方便,需要配置为SSH无密码登录,设置方法如下:
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 采用rsa加密,在/home/当前用户/.ssh目录下找到id_rsa(私钥)和id_rsa.pub(公钥)
cat ./id_rsa.pub >> ./authorized_keys # 将公钥追加到authorized_keys中(authorized_keys用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容)
代码含义如注释所写。
最后,使用ssh localhost
查看是不是不需要输入秘钥就可以直接登陆了。
三、安装Java环境
下载JDK版本为1.8及以上的版本,创建安装目录,将文件解压到安装目录。
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
cd ~ #进入hadoop用户的主目录
cd Downloads #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
设置环境变量
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
让配置生效
source ~/.bashrc
检查是否安装成功,返回正确的版本信息就是安装成功了
java -version
四、安装hadoop
到hadoop官网下载安装文件到本地。本文是基于2.7.1装的,其他的版本好像也大差不差。
- 解压。
sudo tar -zxf ~/下载/hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
- 检查是否成功,如果返回正确的版本信息就说明可用。
cd /usr/local/hadoop
./bin/hadoop version
五、hadoop伪分布式配置
在伪分布式中,节点即作为NameNode也作为DataNode,同时读取HDFS中的文件。需要修改位于/usr/local/hadoop/etc/hadoop/ 中的core-site.xml 和 hdfs-site.xml两个文件。
1、修改core-site.xml 文件
cd /usr/local/hadoop
vim ./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>
上述配置是设定hadoop的临时目录(hadoop.tmp.dir)和分布式文件系统的地址(fs.defaultFS),通过这个地址访问分布式文件系统的各种数据。
2、修改 hdfs-site.xml文件
cd /usr/local/hadoop
vim ./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>
dfs.replication代表副本的个数,由于伪分布式文件就只在一个机器上,副本数量设置为1。dfs.namenode.name.dir设置namenode的文件保存位置;dfs.datanode.data.dir设置DataNode的文件保存位置。
3、NameNode初始化
cd /usr/local/hadoop
./binfs namenode -format
4、开启NameNode和DataNode守护进程
cd /usr/local/hadoop
./sbin/start-dfs.sh
如果出现SSH提示,输入yes就好了
5、检查是否启动成功
jps
如果启动成功就有以下界面:
如果少一个,就要查看提示信息,看看是不是前面的配制出错了,详细检查一下。
运行实例
通过简单的实例看hadoop是否安装成功
./bin/hdfs dfs -mkdir -p /user/hadoop #在HDFS中创建用户目录
./bin/hdfs dfs -mkdir input #在用户目录下创建一个input文件夹
./bin/hdfs dfs -put ./etc/hadoop/*.xml input#把./etc/hadoop文件下所有的xml文件复制上传到input文件夹中
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+' #执行一个grep操作并将结果放到output的文件夹中
./bin/hdfs dfs -cat output/* #查看文件运行结果
如果出现以下结果说明安装好了
虽然运行成功了,但发现老是出现Unable to load native-hadoop library for your platform… using builtin-java classes where applicable这个错误。虽然不影响运行结果,但这玩意还是挺烦的哈。于是就搜了一些资料,比较好的有:
- 解决 Unable to load native-hadoop library for your platform
- 解决unable to load native-hadoop问题
我的解决办法:
vim ~/.bashrc #更改环境变量
在环境变量文件中加入红框中的三行内容
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
当然,保存后需要再次让配置文件生效。
source ~/.bashrc
应该最后就不会报错了。
说明:
博主本人还是属于初级学习阶段,很多东西没解释明白。如果有错误欢迎交流。