hadoop 安装 (单机模式)

禁用 selinux 和 iptables

禁用 selinux 和 iptables

禁用 selinux 和 iptables

配置 /etc/hosts 保证所有主机域名能够相互解析

配置 /etc/hosts 保证所有主机域名能够相互解析

配置 /etc/hosts 保证所有主机域名能够相互解析

1、安装 java

yum install java-1.8.0-openjdk -y

验证:

java -version

2、安装 jps

yum install java-1.8.0-openjdk-devel -y

验证:

jps

3、安装 hadoop

tar zxf hadoop-2.7.3.tar.gz

mv hadoop-2.7.3 /usr/local/hadoop

修改配置文件的运行环境:

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"

33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"

验证:

cd /usr/local/hadoop

./bin/hadoop version

统计分析热词

创建数据源

mkdir input

在这个文件夹里面放入需要统计分析的数据

cp *.txt input/

统计分析1 单词出现的频率

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

统计分析2 某一个关键词出现的频率,例如 dfs 这个词前面字母是 h 的出现的频率

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output1 '(?<=h)dfs'

排错 1

提示 JAVA_HOME is not set and could not be found

表示 JAVA_HOME 没有设置

解决方法:

设置 hadoop-env.sh 里面的 JAVA_HOME 或在运行脚本前面加入前置变量设置

JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre" ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

排错 2

提示 java.net.UnknownHostException: host: host: unknown error

at java.net.InetAddress.getLocalHost(InetAddress.java:1505)

表示主机名没有 IP 解析

解决方法:

在 /etc/hosts 里面增加 主机名 IP 对应关系

排错 3

提示:17/07/24 23:10:46 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized

org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/usr/local/hadoop/output already exists

表示输出的文件目录已经存在

解决方法:

删除已经存在的目录或更改结果保存位置

伪分布式配置:

xml 配置格式

    关键字

    变量值

     描述 

配置文件路径 /usr/local/hadoop/etc/hadoop/

1 配置 hadoop-env.sh

export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"

export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"

查找 JAVA_HOME

readlink -f $(which java)

2 配置 core-site.xml #hadoop 核心配置文件

https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/core-default.xml



    fs.defaultFS 

    file:///    #使用本地文件系统存储 或 hdfs://namenode.ip:9000 





    hadoop.tmp.dir

    /var/hadoop  #除了hadoop软件后,所有hadoop数据的根目录

3 配置 hdfs-site.xml #hdfs核心配置文件

https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml



    dfs.replication

    2

     文件复制份数   





    dfs.namenode.http-address

    192.168.4.10:50070 #namenode 的IP 和端口号





    dfs.namenode.secondary.http-address

    192.168.4.10:50090   #namenode 的IP 和端口号

常用配置选项

dfs.namenode.name.dir

dfs.datanode.data.dir

dfs.namenode.http-address

dfs.namenode.secondary.http-address

dfs.webhdfs.enabled #默认TRUE 可以web访问

dfs.permissions.enabled

4 配置 mapred-site.xml #mapred核心配置文件

https://hadoop.apache.org/docs/r2.7.3/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml



    mapreduce.framework.name

    yarn  #使用local或yarn管理





    mapreduce.jobtracker.http.address

    master:50030





    mapreduce.jobhistory.address

    master:10020





    mapreduce.jobhistory.webapp.address

    master:19888

常用配置选项

mapreduce.framework.name

mapreduce.jobtracker.http.address

mapreduce.jobhistory.address

mapreduce.jobhistory.webapp.address

5 配置 yarn-site.xml #yarn核心配置文件
https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-common/yarn-default.xml



    
        yarn.nodemanager.aux-services
        myhadoop  #指定计算方式

    
        yarn.resourcemanager.hostname
        master  #指定resourcemanager地址
    

常用配置选项

yarn.nodemanager.aux-services

yarn.nodemanager.aux-services.mapreduce.shuffle.class

yarn.resourcemanager.hostname

hadoop 完全分布式安装

1、规划集群 namenode ,secnedorynamenode, datanode

使用 4 台机器组件集群,其中 1台作为 master,其他3台做为 node 节点

master 上的角色 namenode , secnedorynamenode

node 上的角色 datanode

master ip => 192.168.4.10

node ip => 192.168.4.{11,12,13}

修改 /etc/hosts ,配置 ip 与名称的对应关系

禁用防火墙,禁用 selinux

在所有机器上 安装 java 运行环境 openjdk 和 jps 工具

在机器上设置 ssh-key 信任登录,保证 master 能登录所有主机,包括自己

修改SSH配置

vim /etc/ssh/ssh_config

58 StrictHostKeyChecking no

readlink -f /usr/lin/java

在 master 上安装配置:

1、把软件解压拷贝到 /usr/local/hadoop

2、编辑配置文件

hadoop-env.sh

配置 JAVA_HOME , HADOOP_CONF_DIR

xml 配置格式



    关键字

    

    描述说明

core-site.xml



    

        fs.defaultFS  

        hdfs://master:9000  

      

    

        hadoop.tmp.dir

        /var/hadoop

        A base for other temporary directories.

    

hdfs-site.xml



    

        dfs.namenode.http-address

        master:50070

    

    

        dfs.namenode.secondary.http-address

        master:50090

    

    

        dfs.replication

        2

    

配置 vim slaves ,写入所有 datanode 节点

node01

node02

node03

同步所有文件到所有节点

rsync -azSH --delete /usr/local/hadoop m13:/usr/local/

在所有节点上创建 hadoop.tmp.dir 指定的文件夹

mkdir /var/hadoop

在 master 上执行格式化 namenode 的操作

./bin/hdfs namenode -format

启动集群

./sbin/start-dfs.sh

验证集群:

在 master 上

jps 能看见 namenode ,secondarynamenode

netstat -ltunp 能看见 9000,50070,50090 端口被监听

查看集群

./bin/hdfs dfsadmin -report

在 node 上

jps 能看见 datanode

netstat -ltunp 能看见 50075 被监听

排错:

所有的日志在本机的 logs 里面,查看对应的角色日志

通过 web 访问 hdfs角色

http://192.168.4.10:50070/

http://192.168.4.10:50090/

http://192.168.4.12:50075/

hdfs 基本使用 (即./bin/hadoop fs - linux命令)

./bin/hadoop fs #帮助信息

./bin/hadoop fs -ls /

./bin/hadoop fs -mkdir /input

./bin/hadoop fs -put *.txt /input 上传

./bin/hadoop fs -get *.txt /input/ 下载

cd /usr/local/hadoop/etc/hadoop

cp mapred-site.xml.template mapred-site.xml

配置 mapred-site.xml



    

       mapreduce.framework.name

       yarn

    

配置 yarn-site.xml





   

       yarn.nodemanager.aux-services

       mapreduce_shuffle

   

   

       yarn.resourcemanager.hostname

       master

   

配置以后同步到所有机器

rsync -azSH /usr/local/hadoop/etc m13:/usr/local/hadoop/

启动服务

./sbin/start-yarn.sh

验证配置:

在 master 上 jsp 能看见 resourecemanager,并且 netstat 可以看见 8088 端口打开

可以访问 http://master:8088/

在 node 上 jps 可以看见 nodemanager ,并且 netstat 可以看见 8042 端口打开

可以访问 http://node01:8042/

http://192.168.4.10:50070/

http://192.168.4.10:50090

http://192.168.4.11:50075/

在集群上做数据分析

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep hdfs://192.168.4.10:9000/input hdfs://192.168.4.10:9000/output '(?<=h)dfs'

查看分析结果

./bin/hadoop fs -cat hdfs://192.168.4.10:9000/output/*

hdfs 进阶应用 NFS 网关

先停止所有服务

./sbin/stop-all.sh

建用户

10机器#useradd -u 500 -g 100 nfsuser #uid好必须一样

15机器#useradd -u 500 -g 100 nfsuser

/etc/hosts 增加

192.168.4.15 nfsgw #主机名必须也是nfsgw

并同步到所有机器

core-site.xml

hadoop.proxyuser.nfsgw.groups

hadoop.proxyuser.nfsgw.hosts

  • 表示全部允许

    
    
        hadoop.proxyuser.nfsuser.groups
    
        *
    
    
    
          
    
        hadoop.proxyuser.nfsuser.hosts
    
        *
    
    

for i in node{1..3} do

同步到所有主机

scp core-site.xml 192.168.4.13:/usr/local/hadoop/etc/hadoop/

同步到15机器

rsync -azSH /usr/local/hadoop nfsgw:/usr/local/

hdfs-site.xml

nfs.exports.allowed.hosts (* rw)

dfs.namenode.accesstime.precision (3600000) #延长读取时间的更新,提升性能

nfs.dump.dir (/tmp/.hdfs-nfs) #转储目录

nfs.rtmax (4194304) #设定读buff大小

nfs.wtmax (1048576) #设定写buff大小

nfs.port.monitoring.disabled (false)

这里要注意 关闭系统的 portmap 和 nfs 服务添加用户

useradd -u 500 -g 100 nfsuser

setfacl -m user:nfsuser:rwx logs

重启 hdfs 集群服务 ./bin/hdfs dfsadmin -report
nfsgw机器:

启动 portmap ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap

服务

jps 有

Portmap
yum remove rpcbind nfs-utils

启动 nfs3 服务

sudo -u 你core-site里面配置的用户 ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3

另一个机器挂载
yum -y install nfs-utils
mount -t nfs -o vers=3,proto=tcp,noatime,noacl,nolock,sync 192.168.4.15:/ /mnt

排错
查logs


Hadoop 节点管理
• HDFS 增加节点

– 1. 配置所有hadoop环境,包括主机名、ssh免密码登
录、禁用 selinux、iptables、安装 java 环境
– 2. 把namnode的配置文件复制到配置文件目录下
– 3. 修改namenode的slaves文件增加该节点
– 5. 在该节点启动Datanode
./sbin/hadoop-daemon.sh start datanode

– 6. 设置同步带宽,并同步数据
./bin/hdfs dfsadmin -setBalancerBandwidth 67108864
./sbin/start-balancer.sh -threshold 5
– 7. 查看集群状态
./bin/hdfs dfsadmin -report

• HDFS 删除节点
– 配置NameNode的hdfs-site.xml

– dfs.replication 副本数量
– 增加 dfs.hosts.exclude 配置


dfs.hosts.exclude
/usr/local/hadoop/etc/hadoop/exclude

– 增加 exclude 配置文件,写入要删除的节点 ip
– 更新数据
./bin/hdfs dfsadmin -refreshNodes

• HDFS 修复节点
– 修复节点比较简单

– 单独配置一台新 datanode
– 启动服务
./sbin/hadoop-daemon.sh start datanode
– 数据恢复是自动的
– 我们上线以后会自动恢复数据,如果数据量非常巨大,
可能需要一定的时间

• Yarn 的相关操作

– 由于在 2.x hadoop 引入了 yarn 框架,对于计算节点
的操作已经变得非常简单
– 增加节点
sbin/yarn-daemon.sh start nodemanager
– 删除节点
sbin/yarn-daemon.sh stop nodemanager
– 查看节点 (Resourcemanager)
./bin/yarn node -list

• HDFS 还有很多其他的应用方式,比如 native-hdfs,
有兴趣的可以自行测试

– 用到的软件依赖
– cmake, fuse-devel
– protobuf
– protobuf-c
– native-hdfs-fuse

知识点总结
• Hadoop 完全分布式安装的配置
– java 环境
– ssh key 认证
– hosts 配置
– hadoop-env.sh
– core-site.xml
– hdfs-site.xml #hdfs相关
– mapred-site.xml
– yarn-site.xml
– slaves

• Hadoop NFS网关 (可以当文件夹方式挂载使用)
– hadoop-env.sh
– core-site.xml
– hdfs-site.xml
– mount 参数

• Hadoop 节点管理

– datanode 的增加 删除 修复
– nodemanager 的增加 删除 修复