一、大数据相关概念
Bigdata:
- 结构化数据
- 半结构化数据
- 非结构化数据
搜索引擎:搜索组件、索引组件,由蜘蛛程序搜集而来
存储平台
分析处理平台
Google:
- 2003年:The Google File System
- 2004年:MapReduce:Simplified Data Proccessing On Large Cluster
- 2006年:BigTable:A Distributed Storage System for Structure Date
Hadoop:HDFS + MapReduce
HBase
- HDFS
- NameNode 名称节点
- DataNode 数据节点
- SNN:Secondary NameNode 辅助名称节点
- MapReduce
- JobTracker
- TaskTracker
二、函数式编程
- Lisp,ML函数式编程语言:高阶函数
- map:把一个任务映射为多个;接受一个函数为参数,并将其应用于列表中的所有元素
- fold:接受俩个参数,函数、初始值,不断将前一个结果和后一个函数做处理,来实现数据结果折叠
- mapper:同一个键只能发往同一个reducer
- reducer:将mapper处理的结果reducer
三、hadoop组件
- MRv1(Hadoop2) -- MapReduce
- Pig
- Hive
- MRv2(Hadoop2)
- YARN
- Tez:execution engine
- MR:bateh
- Pig:data flow
- Hive:sql
- RM:Resource Manager
- NM:Node Manager
- AM:Application Master
- container:mr任务
- Tez:execution engine
- YARN
四、Hadoop部署
- 单机模型:测试使用
- 伪分布式模型:运行于单机
- 分布式模型:集群模型
hadoop-2.6.2:jdk-1.6以上
hadoop-2.7
一、伪分布式模型部署示例:
CentOS:7.5
JDK:1.7.0_171
hadoop:2.6.5
- 配置基础环境
# yum install java-1.7.0-openjdk.x86_64 -y
# yum install java-1.7.0-openjdk-devel.x86_64 -y
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
# mkdir /bdapps
# tar xf hadoop-2.6.5.tar.gz -C /bdapps/
# cd /bdapps/
# ln -sv hadoop-2.6.5 hadoop
# vim /etc/profile.d/hadoop.sh
export HADOOP_PREFIX=/bdapps/hadoop
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
# . /etc/profile.d/hadoop.sh
- 创建运行Hadoop进程的用户和相关目录
~]# groupadd hadoop
~]# useradd -g hadoop yarn
~]# useradd -g hadoop hdfs
~]# useradd -g hadoop mapred
~]# mkdir -pv /data/hadoop/hdfs/{nn,snn,dn}
~]# chown -R hdfs:hadoop /data/hadoop/hdfs
~]# cd /bdapps/hadoop/
hadoop]# mkdir logs
hadoop]# chmod g+w logs
hadoop]# chown -R yarn:hadoop ./*
- 配置hadoop
hadoop]# vim etc/hadoop/core-site.xml #core-site.xml文件包含了NameNode主机地址以及其监听RPC端口等信息,对于伪分布式模型的安装来说,其主机地址伪localhost。NameNode默认使用的RPC端口伪8020。其简要的配置内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
<final>true</final>
</property>
</configuration>
hadoop]# vim etc/hadoop/hdfs-site.xml #hdfs-site.xml主要用于配置HDFS相关属性,例如复制因子(即数据块的副本数)、NN和DN用于存储数据的目录等。数据块的副本数对于伪分布式的Hadoop应该为1,而NN和DN用于存储的数据目录为前面的步骤中专门为其创建的路径。另外,前面的步骤中也为SNN创建了相关的目录,这里也一并配置其为启用状态。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
</configuration>
注意:如果需要其他用户对hdfs有写入权限,还需要在此文件中添加一项属性定义。
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
hadoop]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
hadoop]# vim etc/hadoop/mapred-site.xml #mapred-site.xml文件用于配置集群的MapReduce framework,此处应该指定使用yarn,另外的可用值还有local和classic。mapred-site.xml默认不存在,但有模板文件mapred-site.xml.template,只需要将其复制mapred-site.xml即可。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
hadoop]# vim etc/hadoop/yarn-site.xml #yarn-site.xml用于配置YARN进程及YARN的相关属性。首先需要指定ResourceManager守护进程的主机和监听的端口,对于伪分布式模型来说,其主机伪localhost,默认的端口为8032;其次需要指定ResourceManager使用的scheduler,以及NodeManager的辅助服务。示例如下:
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>localhost:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>localhost:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
</configuration>
- 格式化HDFS
~]# su - hdfs
~]$ hdfs namenode -format #显示输出successfully formatted表示格式化成功
- 启动
~]# su - hdfs
~]$ hadoop-daemon.sh start namenode
~]$ hadoop-daemon.sh start secondarynamenode
~]$ hadoop-daemon.sh start datanode
~]$ jps #查看java进程,看NameNode是否启动
~]# su - yarn
~]$ yarn-daemon.sh start resourcemanager
~]$ yarn-daemon.sh start nodemanager
~]$ jps
RMUI
- 测试
~]# su - hdfs
~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test/fstab /test/fatab.out #统计文件中每个单词出现的次数
~]$ hdfs dfs -ls /test/fatab.out/
~]$ hdfs dfs -cat /test/fatab.out/part-r-00000 #统计结果
五、hdfs命令
~]$ hdfs dfs -mkdir /test
~]$ hdfs dfs -ls /
~]$ hdfs dfs -put /etc/fstab /user/hdfs/fstab
~]$ hdfs dfs -put /etc/fstab /test/fstab
~]$ hdfs dfs -ls -R /
~]$ hdfs dfs -cat /test/fstab
~]$ hdfs dfs -df -h