Hadoop安装与使用
创建Hadoop用户
- 创建hadoop用户可以使不同用户之间有明确的权限区别,同时也可以使针对Hadoop用户的配置操作不影响其他用户的使用
- 创建用户命令如下:
sudo useradd -m hadoop -s /bin/bash
- 设置用户密码,方便记忆可以设为hadoop
sudo passwd hadoop
- 然后为hadoop用户增加管理员权限,方便部署
sudo adduser hadoop sudo
更新apt和安装Vim编辑器
- 用hadoop用户登录Ubuntu操作系统后,需要更新apt,确保后面顺利安装一些软件
sudo apt-get install vim
在需要确认处输入y即可
安装SSH和配置SSH无密码登录
- 对于Hadoop伪分布式和完全分布式而言,需要启动集群中所有机器的Hadoop守护进程,这个过程可以通过SSH登录来实现
- Ubuntu系统默认安装了SSH服务器和客户端,这里只需要安装SSH服务端,命令如下:
sudo apt-get install openssh-server
安装以后,可以使用如下命令登录本机
ssh localhost
- 出现提示后输入”yes”,并输入密码就可以登录本机了,但每次登录都需要输入密码,因此我们需要配置成SSH无密码登录
- 退出刚才SSH登录,利用ssh-keygen生成密钥,并将密钥加入授权,具体命令如下
# 退出
$exit
# 进入.ssh目录
$cd ~/.ssh/
# 生成密钥
$ssh-keygen -t rsa
- 生成一对密钥,使用rsa通用密钥算法,这时需要有三次回车
5.生成后文件介绍
这时出现几个文件,id_rsa.pub(publilc)公钥,id_rsa私钥,known_hosts是上几步输入ssh 192.168.41.102 产生的文件;
known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥(后面会提到)
- cat查看id_rsa.pub文件
cat id_rsa.pub
- 向自己发送公钥
ssh-copy-id ...
输入密码
- 查看authorized_keys
这时生成了 authorized_keys 文件,文件与id_rsa.pub内容相同
- 退出ssh登录
exit
- 再次登录
ssh ip
此时再用ssh localhost命令,无需输入密码就可以直接登录
安装Java环境
- hadoop本事使用java编写,因此Hadoop的开发和运行都需要Java的支持,对于Hadoop3.1.3而言,其要求使用JDK1.8安装包
- 下载JDK安装文件(jdk-8u162-linux-x64.tar.gz),并且保存到”/home/hadoop/Downloads”目录下
(链接:https://pan.baidu.com/s/1lKmjIaVNQQwjxEU6WQsO7w?pwd=gtin 提取码:gtin) - 执行如下命令创建”/usr/lib/jvm”目录来存放JDK文件
$cd /usr/lib
# 创建目录存放jvm文件
$sudo mkdir jvm /usr/lib/jvm
$cd ~ # 进入hadoop用户的主目录
$cd Downloads
$sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
# 下面继续执行如下命令,设置环境变量:
$vim /etc/profile
# 在该文件的开头位置添加如下内容
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
# 保存 退出
:wq
# 输入如下指令使.bashrc生效
$source ~/.bashrc
#这是可以查看java是否安装成功
$java -version
- 出现如下信息,则说明安装成功
“
安装单机Hadoop
- hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
- 这里是下载到~/Downloads目录下,执行如下命令进行安装
# 解压
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local
# 进入
cd /usr/local/hadoop-3.1.3
# 查看Hadoop安装路径
pwd
# 打开/etc/profile.d/my_env.sh文件添加环境变量
sudo vim /etc/profile
# 输入并保存下列内容
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 保存退出
:wq
# 让文件生效
source /etc/profile
# 查看安装是否成功
hadoop version
Hadoop伪分布式安装
- 配置文件,位置在第二个hadoop下
修改core-site.xml
cd /usr/local/hadoop-3.1.3/etc/hadoop
vim 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>
- 修改hdfs-site.xml(在该目录下)
vim 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>
- 配置完后需要初始化文件系统
cd /usr/local/hadoop
./bin/hdfs namenode -format
- 初始化后,使用下列命令启动 HDFS
./bin/start-dfs.sh
这里说一下我遇到的问题:
1.报“ERROR: Attempting to operate on yarn resourcemanager as root”的错误。
在~/.bashrc写入下面内容,更新source ~/.bashrc
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
2.Permission denied (publickey,passwd),公钥密码问题,前面设置了免密码登录,这里还是有问题,之前是在进入系统后操作ssh,现在在root我又再操作了一次ssh免密码登录,并成功后,在执行启动HDFS命令,又报JDK找不到,上面是在~/.bashrc里配置jdk的,可以在重复此操作并更新,或者将java和hadoop的环境配置都写在/etc/profile,更新文件也行;(上述两种文件挑一种写就行)
-
输入jps查看是否启动成功HDFS
此时可以访问网页(localhost:9870)
-
接下来在HDFS的”/usr/hadoop”目录下创建input目录,命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop
- 然后在”/user/hadoop”目录下创建hadoop目录,命令如下
./bin/hdfs dfs -mkdir input
如果报错,则在input前面加-p
- 接下来可以执行如下命令实现文件”上传”(伪分布式下,/etc/hadoop和HDFS的/user/hadoop/input目录在同一台一机器上,不需要通过网络传输数据)
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
- 接着,运行如下命令执行测试样例程序Grep
./bin/hadoop jar /usr/local/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'
- 输入如下指令查看最终结果
./bin/hdfs dfs -cat output/*
- 删除output目录
./bin/hdfs dfs -rm -r output
- 需要停止运行HDFS可执行如下命令
cd /usr/local/hadoop
./bin/stop-dfs.sh