首先说明,大数据hadoop并不是一种全新的技术或者一种开发的突破。大数据的出现存在于最基本的开发低层,完全为了商业而诞生
1:大数据起源于社交网络,最佳实践于电商平台。也是电商的存在把大数据拉到人的眼前。然后各行各业就开始发掘数据的重要性
大数据的核心hadoop 由doug coutting开发完成,起源谷歌发表的三大论文 GFS,MapReduce,BigTable。大数据在国外已经兴起十年
在国内兴起两年,国内首先使用大数据的是alibaba。
2,大数据分析的数据来源,在现在社会来看。数据存在着重要的价值,是商业化社会不可或缺的重要组成。数据的来源主要在于应用服
器的日志收集,还有企业内部的日志记录。还有比较流氓的收集渠道 通过爬虫(python) :API (网站埋点技术 jsSDK JavaSDK)
3.Apache Hadoop是一个应用java语言实现的软件框架,再由大量的廉价的计算机组成的集群中运行海量数据的分布式并行计算框架,它可以让应用程序支持上千个节点和PB级别的数据。Hadoop是项目的总称,主要是由分布式存储(HDFS)、和分布式并行计算(MapReduce)等组成。
4. Hadoop的四个模块,也叫四大组件
Hadoop Common 公共模块(支其他Hadoop模块的公用工具,包括FileSystem(面向通用文件系统的抽象类)、远程程序调用(RPC)和序列化库)
Hadoop HDFS 存储数据:一个为访问应用数据提供高吞吐量的分布式文件系统。
Hadoop YARN 管理资源(Hadoop2.x) 一个全局的任务调度与资源管理的框架--》YARN是mareduce的云操作系统
Hadoop MapReduce 并行计算框架:一个基于Yarn的大数据分布式并行计算框架
5.Hadoop的发行版本:
Apache
Cloudera 商业发行版(卖服务)cdh
6.Hadoop的体系架构
HDFS
NameNode(一个集群只有一个):用于保存元数据信息(Namenode将元数据保存在内存中),同时会在硬盘上保留一份。元数据(Filename、副本数,各个副本所在的节点的位置)
DataNode:用于具体保存数据的
在HDFS上保存的数据副本数默认是个,副本数可以设置
SecondaryNameNode: 用于同步元数据信息,由于NameNode保存了元数据信息。所以一旦NameNode宕机整个集群都会出现问题
SecondaryNameNode就是用来热备信息的。由于NameNode在集群中只有一个是激活的当当前NameNode宕机它可以把从当前NameNode
同步下来的数据转移到另一个需要激活的NameNode中。
YARN
Yarn相当于一个管理系统一样,它把hadoop的操作需要的资源运行在了自己的框架中。做了统一的管理
ResourceManager:负责全局的资源管理(Container:硬件资源(CPU,内存,硬盘))
Nodemanager:负责所在节点上的资源
MR(MapReduce)
分两个阶段:Map和Reduce 计算框架,编程模型 “分而治之”的思想
分布式并行计算
Map把提交过来的Job做了简单的划分,Reduce来做统计
Hadoop2.x 环境的搭建
准备工作
一、Linux环境
1.修改主机名【不能数字开头,不能特殊字符】
# vi /etc/sysconfig/network
$ cat /etc/sysconfig/network
2.主机映射
# vi /etc/hosts
ip地址 主机名
windows下主机映射
C:/windows/system32/driver/hosts
3.$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static
二、jdk
(推荐)用户只有一个(不要是root),user01
创建两个目录
# mkdir /opt/software /opt/modules
/opt/software 存放*.tag.gz
/opt/modules 放置安装文件
# chown -R user01:user01 /opt/modules/ /opt/software/
$ ll
drwxr-xr-x. 3 user01 user01 4096 Mar 7 07:34 modules
drwxr-xr-x. 2 root root 4096 Nov 22 2013 rh
drwxr-xr-x. 2 user01 user01 4096 Mar 7 07:28 software
安装jdk
$ tar -zxf jdk-7u67-linux-x64.tar.gz -C ../modules/
配置环境变量
# vim /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
使配置生效
# source /etc/profile
卸载openJDK
# rpm -qa | grep jdk
# rpm -e --nodeps XXX.rpm //不验证依赖进行卸载
Linux 防火墙
# service iptables status ##查看防火墙状态
iptables: Firewall is not running.
# service iptables stop ##关闭防火墙
关闭开机启动防火墙
# chkconfig iptables off ##不随机启动
关闭安全子系统
# vi /etc/sysconfig/selinux
SELINUX=disabled
三、配置Hadoop ${HADOOP_HOME}---hadoop的安装目录
解压安装hadoop【注意上传和解压过程中的用户权限问题】
$ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/
1.配置hadoop的java环境支持, ${HADOOP_HOME}/etc/hadoop目录下
hadoop-env.sh
mapred-env.sh
yarn-env.sh
在这3个文件中都配置
export JAVA_HOME=/opt/modules/jdk1.7.0_67
2.与hdfs相关的配置 ${HADOOP_HOME}/etc/hadoop
1)core-site.xml
=============core-site.xml===================
下面[hostname]全部需要填写自己的主机名
<!--NameNode地址,8020是指定进程8020,访问入口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://[hostname]:8020</value>
</property>
<!--hadoop在运行时产生的文件,元数据在本地的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>
============================================
2)hdfs-site.xml
=============hdfs-site.xml============
<!--存放到hdfs上的文件的副本数,伪分布式配置为1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
======================================
3)格式化namenode 只格式化一遍,不要重复格式化
${HADOOP_HOME}目录下:
$ bin/hdfs namenode -format
17/03/21 00:34:52 INFO common.Storage: Storage directory /opt/modules/hadoop-2.5.0/data/dfs/name has been successfully formatted.
4)启动hdfs守护进程
$ sbin/hadoop-daemon.sh start namenode //启动namenode进程
$ sbin/hadoop-daemon.sh start datanode //启动datanode
$ jps
3097 Jps
2931 NameNode
3023 DataNode
web访问界面
http://[hostname]:50070/
5)HDFS文件系统常用命令
$ bin/hdfs dfs //可以查看所有的dfs相关的操作指令
$ bin/hdfs dfs -ls /
$ bin/hdfs dfs -mkdir -p /input/test
$ bin/hdfs dfs -rmdir /input/test
$ bin/hdfs dfs -put /opt/software/jdk-7u67-linux-x64.tar.gz /input/test
3.配置YARN 任务调度 (Mapreduce) 资源管理(resourcemanager nodemanager)
${HADOOP_HOME}/etc/hadoop目录下配置yarn-site.xml
=======yarn-site.xml=====
<!-- 指定ResorceManager所在服务器的主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>[hostname]</value>
</property>
<!-- 指明在执行MapReduce的时候使用shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
====================================
复制并重名模板文件
$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
=======mapred-site.xml=====
${HADOOP_HOME}/etc/hadoop目录下配置mapred-site.xml
<!-- 指定MapReduce基于Yarn来运行-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
=====================================
4.启动hdfs yarn进程
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager
5.检查hdfs yarn启动状态,即查看守护进程
6.向yarn提交mapreducer任务
1)计算圆周率
$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar pi 5 3
2)wordcount词频统计
a.在用户主目录创建一个wordcount.txt
$ vi /home/user01/wordcount.txt
hadoop java
html java
linux hadoop
yarn hadoop
b.上传到hdfs的input目录下
$ bin/hdfs dfs -put ~/wordcoun.txt /input/
c.提交wordcount任务
执行方式
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output
【报错】:再次执行wordcount会提示输出目录已存在
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop.beifeng.com:8020/output already exists
【解决办法】
删除hdfs上的输出目录或者重新指定输出目录
【常见错误】:
1:主机名配置错误或者未配置主机名;
2:配置的参数【<name>标签对】错误,<value>标签对参数有空格
3:xml的注释格式错误,标签对未对齐
4:namenode重复格式化
5:修改配置参数未保存,进程未重启
6:
7.配置日志聚合
=======mapred-site.xml=========
**追加到原来配置和后面
<property>
<name>mapreduce.jobhistory.address</name>
<!--配置实际的主机名和端口-->
<value>[hostname]:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>[hostname]:19888</value>
</property>
==============yarn-site.xml=======
<!--启用日志聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
8.停止所有进程重新启动,以便配置文件生效
1)停止进程
$ sbin/hadoop-daemon.sh stop namenode
$ sbin/hadoop-daemon.sh stop datanode
$ sbin/yarn-daemon.sh stop resourcemanager
$ sbin/yarn-daemon.sh stop nodemanager
2)启动进程
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager
3)启动历史
启动历史服务
sbin/mr-jobhistory-daemon.sh start historyserver
4)查看守护进程
28904 ResourceManager
28724 NameNode
28808 DataNode
29152 NodeManager
29304 JobHistoryServer
30561 Jps
查看hdfs的web界面
http://hadoop.beifeng.com:50070
*28724 NameNode
*28808 DataNode
查看yarn的web访问界面
http://hadoop.beifeng.com:8088
*28904 ResourceManager
28724 NameNode
28808 DataNode
*29152 NodeManager
查看历史日志的web访问界面
http://hadoop.beifeng.com:19888
28904 ResourceManager
28724 NameNode
28808 DataNode
29152 NodeManager
* 29304 JobHistoryServer
以上就是最简单的hadoop伪分布搭建