Hadoop 6.5 伪分布安装配置及其问题解决

1、添加普通用户

useradd 用户名     # 指定用户名
passwd 用户名      # 给刚添加的用户设置登录密码

赋予普通用户 kelly 的 sudo 权限(需 root 权限)

# 更改关键目录之前做好备份的
cp /etc/sudoers ./back-file/etc-sudoers-20180529
vi /etc/sudoers

# 找到并复制 root ALL=(ALL) ALL  行,并将最前面的 root 用户改为刚添加的普通用户
用户名 ALL=(ALL) ALL

2、更改主机名及DNS

sudo vi /etc/sysconfig/network

    HOSTNAME=CentOS-Apache.hadoop-01

sudo vi /etc/hosts
    192.168.1.123 CentOS-Apache.hadoop-01 hadoop-01

 使用 ping 主机名 测试更改是否正确

ping hadoop-01
 PING linux-hadoop.apache-01 (192.168.1.123) 56(84) bytes of data.
 64 bytes from linux-hadoop.apache-01 (192.168.198.131): icmp_seq=1 ttl=64 time=0.081 ms

之后 重新启动 即可完成改名

3、配置免密 SSH 登录

因为Hadoop主节点是通过SSH方式连接从节点并与之通信的,这里的配置是为了避免后续SSH连接时每次都手动输入密码,加快集群连接创建速度。

ssh-keygen -t rsa

   之后会生成公钥和私钥文件,如下

ls -la ./.ssh/
   -rw-------  1 kelly kelly 1675 May 30 06:00 id_rsa
   -rw-r--r--  1 kelly kelly  400 May 30 06:00 id_rsa.pub

ssh-copy-id -i ./.ssh/id_rsa.pub "-p 52013 hadoop-01"

# 把公钥文件拷贝到需要SSH免密登录的主机上

# 因为我已更改默认的SSH 登录端口 22 为 52013,所以此处需要使用 -p 参数指定端口

The authenticity of host '[hadoop-01]:52013 ([192.168.1.123]:52013)' can't be established.
RSA key fingerprint is f8:23:cf:68:b1:98:d5:10:2b:f7:d1:a4:cb:31:21:29.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[hadoop-01]:52013' (RSA) to the list of known hosts.
kelly@hadoop-01's password: 

Now try logging into the machine, with "ssh '-p 52013 hadoop-01'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

至此,SSH免密码登录已设置成功,验证一下,(登录命令确认之后直接进入,不需要输密码方为正确)

ssh hadoop-01 -p 52013

    Last login: Wed May 30 06:06:19 2018 from 192.168.1.123

    [kelly@CentOS-6-x86 ~]$ 

最后,如果是通过手动添加公钥到 authorized_keys 文件(未使用ssh-copy-id命令),希望 ssh 公钥在目的主机上生效,则相关文件和文件夹需满足下面两个条件:

  1. ssh 目录的权限必须是 700 或者为 rwx------
  2. ssh/authorized_keys 文件权限必须是 600 或者为 -rw-------

即,保证只有创建者拥有读写或执行权限,其他用户或组对这个目录和文件都没有任何权限。

具体如下所示(正常自动生成可用的文件):

ls -ld ~/.ssh

    drwx------ 2 kelly kelly 4096 May 30 06:11 /home/kelly/.ssh

ls -l ~/.ssh/

    -rw------- 1 kelly kelly  400 May 30 06:11 authorized_keys

4、安装 Java 1.7 及其配置

创建安装目录,复制安装包并解压文件

mkdir /usr/java    # 创建暗装路径

cd /usr/java/       # 进入安装路径

mv /root/my-file/jdk-7u65-linux-i586.tar.gz ./    # 把准备的Java安装文件拷贝到当前目录下

tar -zxvf jdk-7u65-linux-i586.tar.gz         # 解压

       这里通过创建软链接的方式,更改固定的Java安装路径,便于后续代码复用和更新维护,如果不想使用该方式,也可以直接对解压后的 jdk 文件夹重命名为 Java。

# 创建软链接,便于后续升级,否则还要更改 bash 文件内的路径,关联相关命令
ln -s /usr/java/jdk1.7.0_65 /usr/java/latest

# 创建软连接,此软连接目录即为后续配置环境的Java安装主目录
ln -s /usr/java/latest /usr/java/default

将 Java相关命令添加到PATH环境变量中,便于随时使用Java命令

# 修改前,备份重要文件
cp /etc/profile /root/back-file/etc-profile-20180529

vim /etc/profile
export USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL  # 此行原文件已有

# ====== My edit words for java running===========   注释都是瞎编的,英语不好
JAVA_HOME=/usr/java/default
JRE_HOME=/usr/java/default/jre
CLASSPATH=.:/usr/java/default/lib/dt.jar:/usr/java/default/lib/tools.jar:/usr/java/default/jre/lib

export JAVA_HOME JRE_HOME CLASSPATH

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# =============End of edit =======================

export PATH # 这里源文件已有

使上述设置生效,并进行验证

source /etc/profile

使用 java 或 javac 或 echo $PATH 或 java -version 查看 java 是否安装成功

java -version
   java version "1.7.0_65"
   Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
   Java HotSpot(TM) Server VM (build 24.65-b04, mixed mode)

5、安装Hadoop

安装过程和安装Java类似

mkdir ./local/

mkdir ./local/hadoop        # 创建 Hadoop 主目录

mv ./hadoop-2.6.5.tar.gz ./local/hadoop/  # 移动安装包到指定目录下

cd ./local/hadoop/

tar -zxvf hadoop-2.6.5.tar.gz 

ln -s ~/local/hadoop/hadoop-2.6.5 ~/local/hadoop/latest        # 创建软连接

ln -s ~/local/hadoop/latest ~/local/hadoop/default          # 创建软连接

将 Hadoop 相关命令添加到PATH环境变量中,便于随时使用

cp ./.bashrc ./back-file/.bachrc-20180529        # 备份
vim ./.bashrc 

############ User specific aliases and functions ############
export HADOOP_PREFIX=$HOME/local/hadoop/default
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native"

export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

source ./.bashrc 

其中,变量 HADOOP_COMMON_LIB_NATIVE_DIR HADOOP_OPTS 主要解决 ssh: Could not resolve hostname XXXX: Name or service not known 的问题,还有部分网页也表示可以解决 “ Unable to load native-hadoop library for your platform... using builtin-java classes where applicable ”的问题,但是截至此文编辑之前,我的这个问题也没有解决(2015)


6、配置 hadoop

切换路径

cd $HADOOP_PREFIX/etc/hadoop/

# 等价于执行 
# cd /home/kelly/local/hadoop/default/etc/hadoop/  
# 如果之前配置没有问题,这里就会显示出来

1)hadoop-env.sh

cp ./hadoop-env.sh ~/back-file/hadoop-env.sh-20180529    # 备份

vim ./hadoop-env.sh


# The java implementation to use.
export JAVA_HOME=/usr/java/default

# Appoint the port for SSH  如果更改过 SSH 的默认端口,则在此处指定
export HADOOP_SSH_OPTS="-p 52013"

export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_PREFIX/lib/native"  

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native"  

 注:如果此前更改过 SSH 的默认登录端口,则在需要通过 HADOOP_SSH_OPTS 参数指定

以下所有内容都需要添加到相应文件的 <configuration>  </coonfiguration> 这两个标签之间 ,其中,<property></<property>标签代表一个属性,多个代表多个属性,其内部,name 为属性名,value 为属性值,description 为对该属性的描述(可选添加)。

2)core-site.xml

cp ./core-site.xml ~/back-file/core-site.xml-20180529 

mkdir -p /home/kelly/local/var/hadoop-data/temp/   # 创建Hadoop临时存储目录

vim ./core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
     <name>fs.defaultFS</name>
     <value>hdfs://CentOS-Apache.hadoop-01:9000/</value>
</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
     <name>hadoop.tmp.dir</name>
     <value>/home/kelly/local/var/hadoop-data/temp/hadoop-${user.name}</value>
     <description>Abase for other temporary directories.</description>
</property>

3)hdfs-site.xml

cp ./hdfs-site.xml ~/back-file/hdfs-site.xml-20180529

vim ./hdfs-site.xml
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///home/kelly/local/var/hadoop-data/hdfs/datanode</value>
</property>

<property>
    <name>hdfs.namenode.name.dir</name>
    <value>file:///home/kelly/local/var/hadoop-data/hdfs/namenode</value>
</property>

<property>
    <name>hdfs.namenode.checkpoint.dir</name>
    <value>file:///home/kelly/local/var/hadoop-data/hdfs/namesecondary</value>
</property>

<!-- 指定HDFS副本的数量 -->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

<!-- 指定 Secondary Namenode 的 IP, 在 SSH 登录时使用 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>CentOS-Apache.hadoop-01:50090</value>
</property>

4)yarn-site.xml

cp ./yarn-site.xml ~/back-file/yarn-site.xml-20180530

vim ./yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>CentOS-Apache.hadoop-01</value>
</property>

<!-- reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

5)mapred-site.xml

cp ./mapred-site.xml ~/back-file/mapred-site.xml-20180530

vim ./mapred-site.xml
<!-- 指定 Mapreduce 运行在 Yarn 资源调度集群上运行,否则会在本地运行 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<!-- 用来存放与每个job相关的数据 -->
<property>
    <name>mapreduce.jobtracker.staging.root.dir</name>
    <value>/home/kelly/local/var/hadoop-data/mapred/staging</value>
</property>

6)Datanode节点指定

vim ./slaves # 指定哪些机器上面要启动 DataNode

# 删除 localhost

# 添加本地主机名
CentOS-Apache.hadoop-01

7、格式化HDFS

hdfs namenode -format

18/05/31 00:43:00 INFO common.Storage: Storage directory /home/kelly/local/var/hadoop-data/temp/hadoop-kelly/dfs/name has been successfully formatted.

18/05/31 00:43:00 INFO util.ExitUtil: Exiting with status 0
18/05/31 00:43:00 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at CentOS-Apache.hadoop-01/192.168.1.123

************************************************************/

注意,如果出现 "has been successfully formatted",并且返回值是零,则表明格式化成功

8、启动Hdoop

start-dfs.sh    # 只启动 HDFS

# 或者使用如下命令,启动全部集群
start-all.sh

验证进程启动情况

jps
7831 DataNode
8393 NodeManager
7702 NameNode
8170 ResourceManager
8599 Jps
8004 SecondaryNameNode

9、安装过程中出现的问题及其解决方法

1)ssh: connect to host XXX port 22: Connection refused

        已更改 SSH 默认端口的,必须要在 hadoop-env.sh 中使用以下语句指定端口号

            export HADOOP_SSH_OPTS="-p 更改的端口号"   # 此句需要自己添加,没有默认项

2)ssh: Could not resolve hostname XXX: Name or service not known

       vi ~/.bashrc

添加前面特意提过的两个变量 HADOOP_COMMON_LIB_NATIVE_DIR 和 HADOOP_OPTS

3)无法启动 Datanode

        原因在于之前多次执行 hdfs namenode -format,并且在格式化期间输入了 Y 确认再次格式化

        解决办法是把 Hadoop 临时目录下的所有文件都删除,也即恢复到 Hadoop还未真正运行之前的状态。

rm -rf ./local/var/hadoop-data/hdfs/datanode/*

rm -rf ./local/var/hadoop-data/temp/*

4)无法启动 Secondarynamenode 或 Starting secondary namenodes [0.0.0.0]
0.0.0.0: ssh: connect to host 0.0.0.0 port XXX: Connection refused

        这也是之前优化 SSH 远程登陆时,更改了默认的端口号 SSH 默认的监听地址,只要在配置hdfs-site.xml文件时添加如下内容指定更改后可被监听的地址即可:

<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>IP地址或已经在DNS解析文件中指定的主机名:50090</value>   # 端口号不要更改,这是默认的
</property>

10、Hadoop运行示例-计算圆周率

​​​​​​# 切换到Hadoop自带实例程序目录下
cd /home/kelly/local/hadoop/default/share/hadoop/mapreduce/  

# 使用实例程序执行圆周率计算
# 第一个参数是运行map任务次数
# 第二个参数是每个map任务执行次数
# 所以,这里总运行次数是 25 次。
hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 5 5  

部分执行结果如下:

Job Finished in 16.705 seconds

Estimated value of Pi is 3.68000000000000000000
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值