Hadoop

2018-11-25  本文已影响0人  436048bfc6a1

注: 如果使用虚拟机的话,请将网络适配器设置为NAT并且将防火墙关闭并且将防火墙开机自启动也一并关闭,selinux选择disabled,

  1. 广义和狭义
广义: 以hadoop为主的生态圈
狭义: 专指hadoop
  1. Hadoop 2.x的组成
出现大数据组件原因: 对于mysql来说,mysql处理超过1亿行的表效率差,需要将mysql数据同步到大数据平台
一般使用HDFS存储

HDFS:  分布式文件系统
mapreduce: 分布式计算(缺点: 开发难度高,计算慢, 被hive sql/ spark替代)
yarn: 资源(内存, cpu) + 作业(job) 的调度管理系统
  1. Hadoop 2.x介绍
(1). Hadoop是Apache基金会,特点是可靠,可伸缩,分布式的计算框架
(2). 企业一般选择CDH/Ambari部署, 因为一般不会只部署hadoop
(3). CDH代表什么:
cloudera对hadooop源码进行添加新功能或者修复bug之后,就变成CDH版本,在使用时,跟apache版本没有差别。
  1. 安装Hadoop
预处理
(1) 设置/etc/selinux中SELINUX=disabled
(2) 设置/etc/hosts中
    192.168.198.129 hadoop001
(3) 设置/etc/sysconfig/network
    HOSTNAME=hadoop001
(4) 切换到root用户,关闭防火墙
     service iptables stop
(5) 禁止防火墙开机自启动
     chkconfig iptables off
(1) 新建hadoop用户
     useradd hadoop
(2) 给hadoop用户赋予sudo权限
      编辑/etc/sudoers文件
      添加  
      hadoop  ALL=(ALL)       NOPASSWD: ALL
(3) 切换到hadoop用户
     su - hadoop
在hadoop的home directory下创建source software app三个文件夹
     mkdir source software app
解压tar文件夹到app文件夹
  1. Hadoop前置软件
(1) java(推荐jdk1.7)
(2) ssh
  1. 配置文件
(1) 进入刚才解压好的hadoop文件夹,然后进入当前路径下的etc/hadoop文件夹,修改hadoop-env.sh文件
修改1:
将export JAVA_HOME=${JAVA_HOME}
修改为export JAVA_HOME=/usr/java/jdk1.7.0_79

修改2:
添加 export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

(2) 测试修改

运行$HADOOP_PREFIX/bin/hadoop,如果出现如下显示,说明配置成功

Usage: hadoop [--config confdir] COMMAND
       where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings
 or
  CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.
  1. 启动Hadoop集群的三种模式
Local (Standalone) Mode: 单机模式
没有进程
Pseudo-Distributed Mode: 伪分布式
只有一台机器,有进程,用于学习
Fully-Distributed Mode: 分布式
生产中, 有进程
  1. 以伪分布式启动
(1) 配置$HADOOP_PREFIX/etc/core-site.xml
!!!!!!!!!!!注意
配置文件的字母大小写(坑了我一中午)
配置$HADOOP_PREFIX/etc/hadoop/core-site.xml
在其内部添加如下配置
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <!--hadoop代表的是机器名称-->
        <value>hdfs://hadoop001:9000</value>
    </property>
</configuration>
(2) 配置$HADOOP_PREFIX/etc/hdfs-site.xml
在其内部添加如下

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

(3) 配置无密码访问
在terminal输入如下命令

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa(生成一个key's randomart image)
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
此时会出现一个坑

-rw-rw-r--. 1 hadoop hadoop 358 Nov 37 25:65 authorized_keys
此时authorized_keys的权限为644,会出问题
所以将其权限改为600

(4) 格式化文件系统

输入 bin/hdfs namenode -format
(5) 启动dfs
开始namenode进程和datanode进程
执行$HADOOP_PREFIX/sbin/start-dfs.sh
启动之后,输入jps显示启动的dfs进程

9757 NameNode
9854 DataNode
10050 SecondaryNameNode
10153 Jps
(6) 在web界面访问hdfs
在浏览器输入$ip_address: 50070
(7) 在$HADOOP_PREFIX/etc/hadoop文件夹下
执行 cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml下编辑
    <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
    </configuration>
(8) 在yarn-site中编辑
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle </value>
        </property>
</configuration>
(9) 启动yarn 
$HADOOP_PREFIX/sbin/start-yarn.sh
输入jps,显示如下

9757 NameNode
9854 DataNode
15734 ResourceManager
15822 NodeManager
10050 SecondaryNameNode
15852 Jps
(10) 打开yarn的web界面
ip_address:8088

注意: 在iptables开放端口
  1. 进行Map-reduce job
(1) linux与HDFS
    linux是文件系统, HDFS是分布式文件系统,HDFS是架在linux之上的,所以HDFS都是以如下形式开头
    
    HDFS dfs -
    之后再加linux命令 
(1) 在HDFS上创建/user/$user_name文件夹

在$HADOOP_PREFIX目录下执行./bin/hdfs dfs -mkdir -p /user/$user_name
(2) 将linux上$HADOOP_PREFIX/etc/hadoop里的文件拷贝到hdsf文件夹input上
bin/hdfs dfs -put etc/hadoop input

注: 没有指定默认是放在HDFS中的/user/hadoop文件夹
(4) 运行官网给的测试MapReduce
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar grep input output 'dfs[a-z.]+'
运行输出如下
INFO mapreduce.Job:  map 0% reduce 0%
INFO mapreduce.Job:  map 3% reduce 0%
INFO mapreduce.Job:  map 7% reduce 0%
INFO mapreduce.Job:  map 10% reduce 0%
INFO mapreduce.Job:  map 13% reduce 0%
INFO mapreduce.Job:  map 17% reduce 0%
INFO mapreduce.Job:  map 20% reduce 0%
INFO mapreduce.Job:  map 23% reduce 0%
INFO mapreduce.Job:  map 27% reduce 0%
INFO mapreduce.Job:  map 30% reduce 0%
INFO mapreduce.Job:  map 33% reduce 0%
INFO mapreduce.Job:  map 37% reduce 0%
INFO mapreduce.Job:  map 40% reduce 0%
INFO mapreduce.Job:  map 40% reduce 13%
INFO mapreduce.Job:  map 43% reduce 13%
INFO mapreduce.Job:  map 47% reduce 13%
INFO mapreduce.Job:  map 53% reduce 13%
INFO mapreduce.Job:  map 57% reduce 17%
INFO mapreduce.Job:  map 57% reduce 19%
INFO mapreduce.Job:  map 60% reduce 19%
INFO mapreduce.Job:  map 63% reduce 20%
INFO mapreduce.Job:  map 67% reduce 20%
INFO mapreduce.Job:  map 70% reduce 22%
INFO mapreduce.Job:  map 73% reduce 22%
INFO mapreduce.Job:  map 73% reduce 24%
INFO mapreduce.Job:  map 77% reduce 24%
INFO mapreduce.Job:  map 77% reduce 26%
INFO mapreduce.Job:  map 80% reduce 26%
INFO mapreduce.Job:  map 83% reduce 26%
INFO mapreduce.Job:  map 87% reduce 28%
INFO mapreduce.Job:  map 90% reduce 28%
INFO mapreduce.Job:  map 90% reduce 30%
INFO mapreduce.Job:  map 93% reduce 30%
INFO mapreduce.Job:  map 100% reduce 31%
INFO mapreduce.Job:  map 100% reduce 100%
注: 
(1) 其中map指的是map函数与reduce函数,都为递归函数
(2) map函数还未完成,reduce函数就开始运行
(5) 将HDFS文件夹下载到linux文件夹
bin/hdfs dfs -get output output
  1. HDFS三个进程全部以hadoop001启动
(1) 问题发现
当运行stop-dfs.sh时输出如下

Stopping namenodes on [hadoop001]
hadoop001: stopping namenode
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode

此时Secondary namenodes在0.0.0.0上,但是我们想要让secondary namenode也在hadoop001上启动
(2) 设置
NN修改的是core-site.xml
DN修改的是slaves文件
SNN: 由于SNN是HDFS组件服务的进程,所以去hdfs-default.xml中修改(可以从官网configuration侧边栏找到)
在hdfs-site.xml中添加
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop001:50090</value>
</property>
<property>
  <name>dfs.namenode.secondary.https-address</name>
  <value>hadoop001:50091</value>
</property>
  1. JPS命令
(1) jps来源

/usr/java/jdk1.7.0_79/bin/jps
也就是说jps来自于java
(2) root用户看JPS, 会如下显示

32573 Jps
31530 -- process information unavailable
31648 -- process information unavailable
31808 -- process information unavailable

此时并不知道上述进程是否真的存在
对于process information unavailable的正确处理方式
a. 找到其进程号
b. ps -ef | grep pid 确认该进程是否存在
   if exsit: 
      可以知道哪个用户运行此进程
      su - 用户, 切换到该用户进去查看
  else if 不存在:
      手动删除此文件夹
      其残留信息都保存在/tmp/hsperdata_hadoop文件夹下
      如下显示
      -rw------- 1 hadoop hadoop 32768 Dec  3 04:30 31530
      -rw------- 1 hadoop hadoop 32768 Dec  3 04:30 31648
      -rw------- 1 hadoop hadoop 32768 Dec  3 04:29 31808
      当删除某一个文件夹, 如删除31530, 再执行JPS显示如下

      32965 Jps
      31648 -- process information unavailable
      31808 -- process information unavailable
注: 未经过ps -ef确认该进程存在就直接删除是不好的,
因为即使删除/tmp/hsperdata_hadoop下的文件,
该进程仍然存在,但是基于jps的监控等shell文件认为该进程消失,
从而采取一系列措施
12 ssh
 
(1) 端口号为22
(2) [hadoop@hadoop001 ~]$ ssh 192.168.110.120
     代表以hadoop用户去连接192.168.110.120的机器
(3) ssh root@192.168.110.120 date
     连接云主机并将date结果返回给客户端
(4) 两个linux系统之间如何传输
      a. scp 
          eg. scp test.md 192.168.110.120:/home/hadoop
                将本地test.md传到远程主机上
                scp 192.168.110.120:/home/hadoop/test.md newTest.md 将育成主机上的文件传回来
      b. ssh多台机器互相信任关系
         假如云主机是生产机器,无法有密码,想要互相传输文件就需要配置相互信任关系
配置相互信息关系的步骤

a. ssh-keygen
b. 此时在.ssh文件夹下会生成如下文件
   -rw------- 1 hadoop hadoop 1675  id_rsa
   -rw-r--r-- 1 hadoop hadoop  398  id_rsa.pub
c. cat id_rsa.pub >> authorized_keys
(注: chmod 700 -R ~/.ssh并且chmod 600 ~/.ssh/authorized_keys)
d. 将远程主机的id_rsa.pub文件scp到本机上
    scp 192.168.110.120:/home/hadoop/id_rsa.pub id_rsa.pub1
e. cat id_rsa.pub1 >> authorized_keys
f. 在 /etc/hosts上配置多台机器的ip和host的对应关系(注意)
g. 将authorized_keys用scp命令传输到另外的主机
  1. hadoop目录
drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 bin 命令都保存与此文件夹
drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 sbin 启动脚本和停止脚本都保存在此文件夹
drwxr-xr-x  6 hadoop hadoop  4096 Mar 23  2016 etc 配置文件都保存与此文件夹 其他大数据组件有可能以config conf命令此类文件夹
drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 lib 存储jar包
drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 bin-mapreduce1
drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 cloudera
drwxr-xr-x  5 hadoop hadoop  4096 Mar 23  2016 examples
drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 examples-mapreduce1
drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 include
drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 libexec
-rw-r--r--  1 hadoop hadoop 17087 Mar 23  2016 LICENSE.txt
drwxrwxr-x  3 hadoop hadoop  4096 Dec 17 06:45 logs
-rw-r--r--  1 hadoop hadoop   101 Mar 23  2016 NOTICE.txt
drwxrwxr-x  2 hadoop hadoop  4096 Dec  2 06:50 output
-rw-r--r--  1 hadoop hadoop  1366 Mar 23  2016 README.txt
drwxr-xr-x  4 hadoop hadoop  4096 Mar 23  2016 share
drwxr-xr-x 17 hadoop hadoop  4096 Mar 23  2016 src
上一篇下一篇

猜你喜欢

热点阅读