Hadoop Day1

Hadoop Day1

1.Hadoop简介(****了解***)

  • hadoop是什么?

What Is Apache Hadoop?

The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

Hadoop是开源的,可靠的,可扩展的,分布式的运算存储系统。

 

备注:用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。

 

  • Hadoop能解决什么问题?(***记住***)

l  海量数据的存储(HDFS)

l  海量数据的分析(MapReduce)

l  资源管理调度(YARN)

 

 

  • hadoop来源与历史(****了解***)

l  Hapdoop是Google的集群系统的开源实现

        -Google集群系统:

            GFS(Google File System)  、MapReduce、BigTable

         -Hadoop主要由HDFS(Hadoop Distributed File System即hadoop分布式文件系统)、MapReduce和Hbase组成。

l  Hadoop的最初是为了解决Nutch的海量数据爬取和存储需要。

l  Hadoop在2005年秋天作为Lucene的子项目Nutch的一部分正式引入Apache基金会。

  • hadoop具体能干什么(***知道****)

hadoop擅长日志分析

l  facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析.

l  淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!

l  在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!)

  • 哪些公司使用hadoop(***了解***)

l  Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务。

比较大型IT公司如EMC、Microsoft、Intel、Teradata、Cisco都明显增加了Hadoop方面的投入。

l  在淘宝:

n  从09年开始,用于对海量数据的离线处理,例如对日志的分析,交易记录的分析

n  规模从当初的3~4百台节点,增加到现在的一个集群有3000个节点,淘宝现在已经有2~3个这样的集群

n  在支付宝的集群规模也有700台节点,使用Hbase对用户的消费记录可以实现毫秒级查询

  • Hadoop生态地图(***了解***)

 

1.这一切是如何开始的—Web上庞大的数据!

2.使用Nutch抓取Web数据

3.要保存Web上庞大的数据——HDFS应运而生

4.如何使用这些庞大的数据?

5.采用Java或任何的流/管道语言构建MapReduce框架用于编码并进行分析

6.如何获取Web日志,点击流,Apache日志,服务器日志等非结构化数据——fuse,webdav, chukwa, flume, Scribe

7.Hiho和sqoop将数据加载到HDFS中,关系型数据库也能够加入到Hadoop队伍中

8.MapReduce编程需要的高级接口——Pig, Hive, Jaql

9.具有先进的UI报表功能的BI工具- Intellicus

10.Map-Reduce处理过程使用的工作流工具及高级语言

11.监控、管理hadoop,运行jobs/hive,查看HDFS的高级视图—Hue, karmasphere, eclipse plugin, cacti, ganglia

12.支持框架—Avro (进行序列化), Zookeeper (用于协同)

13.更多高级接口——Mahout, Elastic map Reduce

14.同样可以进行Hbase

备注:
Sqoop传统数据库和hdfs进行数据交换,目前支持cloudera版本的hadoop,项目主页:https://github.com/cloudera/sqoop
Flume日志实时传输整合工具,项目主页:https://github.com/cloudera/flume
HBase是一个分布式的、面向列的开源数据库http://hbase.apache.org/
 
 
  • Hadoop版本(***了解***)

l  Apache hadoop官方网址http://hadoop.apache.org/

官方目前最高版本(2.7.0)

备注:下载地址http://hadoop.apache.org/releases.html

官方提供的包有两种:

一:source包,也就是源码包要求自已编译安装的包

二:binary包,32位编译后的包,可以直接使用的包。

注意:官方只提供32位环境编译的包,只能运行在32位机器上.生产环境一般是64位操作系统,要求自已编译源码包进行安装。

另外下载所有版本网址:http://archive.apache.org/dist/hadoop/

其中http://archive.apache.org/dist这部分是apache开源的所有项目地址,而http://archive.apache.org/dist/hadoop/ 是hadoop项目的地址。

 

  • Hadoop的特点(***了解***)

l  扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。

l  成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。

l  高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。

l  可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务。

  • Hadoop部署方式(***了解***)

l  本地模式

l  伪分布模式

l  集群模式

 

2.Linux环境准备(***必须掌握****)

参考:http://www.cnblogs.com/LUCKMOON/articles/8833872.html

安装VMWare软件

在VMWare软件下linux系统

配置VMWare虚拟软件网卡,保证Windows机器能和虚拟机linux正常通信  

修改主机名

设置linux机器IP

 

修改主机名和IP的映射关系

关闭防火墙

              #查看防火墙状态

              service iptables status

              #关闭防火墙

              service iptables stop

              #查看防火墙开机启动状态

              chkconfig iptables --list

              #关闭防火墙开机启动

              chkconfig iptables off

 

    centos7使用如下命令:

    关闭firewall:
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动
    firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

重启系统

reboot

安装JDK

  • 上传
  • 解压jdk

              #创建文件夹

              mkdir /opt/java

              #解压

              tar -zxvf   jdk-7u45-linux-x64.tar.gz  -C /opt/java/    

  • 将java添加到环境变量中

              vim /etc/profile

              #在文件最后添加

  export JAVA_HOME=/opt/java/jdk1.7.0_45
  export JRE_HOME=${JAVA_HOME}/jre
  export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  export PATH=$JAVA_HOME/bin:$PATH

              #刷新配置

              source /etc/profile

    #验证

    java -version

l    SSH免密码登录的配置

  原因:在搭建Linux集群服务的时候,主服务器需要启动从服务器的服务,如果通过手动启动,集群内服务器几台还好,要是像阿里1000台的云梯Hadoop集群的话,轨迹启动一次集群就得几个工程师一两天时间,是不是很恐怖。如果使用免密登录,主服务器就能通过程序执行启动脚步,自动帮我们将从服务器的应用启动。而这一切就是建立在ssh服务的免密码登录之上的。所以要学习集群部署,就必须了解linux的免密码登录。

  目标:在主服务器Frank2016上的用户免密码登录从服务器Frank2017上的用户

  #使用root登录主服务器Frank2016

  cd ~

  #在主服务器Frank2017上生成密钥对

  ssh-keygen -t rsa    #然后敲四下回车

  

  会在cd ~/.ssh目录下生成密钥对

drwx------  2 usera usera 4096  8月 24 09:22 .  
drwxrwx--- 12 usera usera 4096  8月 24 09:22 ..  
-rw-------  1 usera usera 1675  8月 24 09:22 id_rsa  
-rw-r--r--  1 usera usera  399  8月 24 09:22 id_rsa.pub  

  #然后将公钥上传到从服务器Frank2017,并以root用户登录

  ssh-copy-id root@Frank2017             #敲三次回车

 

        #这个时候主服务器root的公钥文件内容会追加写入到从服务器root的 .ssh/authorized_keys 文件中

     另外我们要注意,.ssh目录的权限为700,其下文件authorized_keys和私钥的权限为600。否则会因为权限问题导致无法免密码登录。

        Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。 

  ssh root@Frank2017 

  ★★★★★1. 建议将主服务器Frank2016的公钥分别传至主服务器Frank2016、从服务器Frank2017、从服务器Frank2018

      2.建议从服务器Frank2017、从服务器Frank2018将公钥传至主服务器Frank2016、从服务器Frank2017、从服务器Frank2018

      这样子,在后面启动集群的时候,就不用反复输入密码了!!!

下面是原理:

 

3搭建Hadoop的伪分布环境(***必须掌握***)

上传hadoop2.7.0编译后的包并解压到/itcast目录下

mkdir /itcast

解压

tar  -zxvf  hadoop.2.7.0.tar.gz -C /opt

 

配置hadoop

注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop

       伪分布式需要修改5个配置文件

  首先要创建文件夹

  1./opt/hadoop/hadoop-2.7.3/hdfs/name

  2./opt/hadoop/hadoop-2.7.3/hdfs/data

  3./opt/hadoop/hadoop-2.7.3/tmp

第一个:hadoop-env.sh

              vim hadoop-env.sh

              #第27行

              export JAVA_HOME=/opt/java/jdk1.7.0_45

             

第二个:core-site.xml       

<property>
<name>fs.default.name</name>
<value>hdfs://Frank2016:9000</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Frank2016:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop-2.7.3/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>   

 

第三个:hdfs-site.xml      

<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop-2.7.3/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop-2.7.3/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Frank2016:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

             

第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)

              mv mapred-site.xml.template mapred-site.xml

              vim mapred-site.xml

              <!-- 指定mr运行在yarn上 -->

    <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
    </property>

             

第五个:yarn-site.xml  

<property>
<name>yarn.resourcemanager.hostname</name>
<value>Frank2016</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Frank2016:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Frank2016:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Frank2016:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Frank2016:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Frank2016:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

 

将hadoop添加到环境变量

vim /etc/profile

内容如下:

export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export JAVA_HOME=/opt/java/jdk1.7.0_45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME_WARN_SUPPRESS=1

 

让配置生效:

source /etc/profile

 

l 修改/opt/hadoop/hadoop-2.7.3/etc/hadoop/slaves,改成如下内容

Frank2017

Frank2018

注意:这样配置的前提是主节点要能免密登录到从节点中
    当你去执行start-dfs.sh时,它会去slaves文件中去找从节点(这就是配置免密登录的原因)
    然后去启动从节点。同时自己也需要做免密登录也就是说要自己对自己做免密登录.

 

格式化namenode(是对namenode进行初始化)

hdfs namenode -format 或者 hadoop namenode -format

 

l 将整个hadoop-2.7.3\jdk1.7.0_45\profile 文件夹及其子文件夹使用scp复制到Frank2017和Frank2018的相同目录中:

scp -r /opt/hadoop/hadoop-2.7.3 root@Frank2017:/opt/hadoop
scp -r /opt/hadoop/hadoop-2.7.3 root@Frank2018:/opt/hadoop
scp -r /opt/java/jdk1.7.0_45/ root@Frank2017:/opt/java
scp -r /opt/java/jdk1.7.0_45/ root@Frank2018:/opt/java
scp -r /etc/profile root@Frank2017:/etc
scp -r /etc/profile root@Frank2018:/etc

 

启动hadoop

  • 先启动HDFS

sbin/start-dfs.sh

  • 再启动YARN

       sbin/start-yarn.sh

  •  也可以使用如下命令

  hadoop namenode -format
  hadoop-daemon.sh start namenode
  hadoop-daemons.sh start datanode
  yarn-daemon.sh start resourcemanager
  yarn-daemons.sh start nodemanager
  hadoop-daemon.sh start secondarynamenode

 

验证是否启动成功

使用jps命令验证

master:

NameNode

Jps

SecondaryNameNode

ResourceManager

 slaves:

 DataNode

Jps

NodeManager

l  查看集群状态
hadoop dfsadmin -report

 

http://frank2016:50070/ (HDFS管理界面)

http://frank2016:18088/ (MR管理界面)

 

4.Hadoop环境测试(***必须掌握***)

  • hadoop jar /opt/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 5 10

      •  

  • 测试HDSF

n  HDFS shell操作

#查看帮助

                     hadoop fs -help <cmd>

#上传

                     hadoop fs -put <linux上文件> <hdfs上的路径>

#查看文件内容

                     hadoop fs -cat <hdfs上的路径>

#查看文件列表

                     hadoop fs -ls /

#下载文件

                     hadoop fs -get <hdfs上的路径> <linux上文件>

 

上传文件到hdfs文件系统上

hadoop  fs  -put  <linux上文件>  <hdfs上的路径>

例如:hadoop fs -put /root/install.log hdfs://Frank2016:9000/

删除hdfs系统文件

hadoop  fs  -rmr  hdfs://Frank2016:9000/install.log

 

注:如果能正常上传和删除文件说明HDFS没问题。

  • 测试Yarn

上传一个文件到HDFS

hadoop fs -put  words.txt  hdfs://Frank2016:9000/

 

让Yarn来统计一下文件信息

cd  $HADOOP_HOME/share/hadoop/mapreduce

#测试命令

hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /words.txt hdfs://Frank2016:9000/wc

查看结果

 

 

注:如果能正常生成一个目录,并把统计信息输出到文件夹下,说明Yarn没问题

 

posted @ 2016-11-30 21:09  十年饮冰难凉热血  阅读(161)  评论(0编辑  收藏  举报