Hadoop的背景起源一—GFS(Google File System)
一、什么是大数据的本质
(1)数据的存储:分布式文件系统(分布式存储)—HDFS(Hadoop Distributed File System)
(2)数据的计算:分布式计算
二、如何解决大数据的存储----分布式文件系统(HDFS来源于GFS)
举例:网盘
(1)GFS:没有硬盘的数据只能存在内存中
(2)Hadoop的安装模式:
(*)本地模式:至少1台
(*)伪分布式模式:至少1台
(*)全分布式模式:至少3台
Hadoop的背景起源二:MapReduce
一、如何解决大数据的计算之分布式计算
(1)什么是PageRank(MapReduce的问题的来源)
(2)MapReduce(Java语言实现)基础编程模型: 把一个大任务拆分成小任务,再进行汇总
(*) 更简单一点例子
Hadoop的背景起源三 —HBase:
BigTable ----> 大表 ----> NoSQL数据库:HBase
一、关系型数据库(Oracle、MySQL、SQL Server)的特点
1、什么是关系型数据库?基于关系模型(基于二维表)所提出的一种数据库
2、ER(Entity-Relationalship)模型:通过增加外键来减少数据的冗余
3、举例:学生-系
二、什么是BigTable?: 把所有的数据保存到一张表中,采用冗余 —> 好处:提高效率
1、因为有了bigtable的思想:NoSQL:HBase数据库
2、HBase基于Hadoop的HDFS的
3、描述HBase的表结构
Hadoop的环境搭建
一、准备实验的环境:
1、安装Linux、JDK
2、配置主机名(vim /etc/hosts)、免密码登录
3、约定:安装目录:/root/training
4、ssh-keygen -t rsa生成秘钥
5、ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_rsa
6、cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
7、/etc/hosts 添加主机地址 名称
二、安装:(hadoop-2.4.1示例)
1、解压 : tar -zxvf hadoop-2.4.1.tar.gz -C /root/training/
2、设置环境变量: vi ~/.bash_profile
HADOOP_HOME=/root/training/hadoop-2.4.1
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
生效环境变量: source ~/.bash_profile
三、Hadoop的目录结构
四、Hadoop的本地模式
1、特点:不具备HDFS,只能测试MapReduce程序
2、修改hadoop-env.sh
修改第27行:export JAVA_HOME=/root/training/jdk1.7.0_75
3、演示Demo: $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar
命令:hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /root/data/input/data.txt /root/data/output/wc
日志:17/08/04 23:28:38 INFO mapreduce.Job: map 100% reduce 100%
注意:MR有一个默认的排序规则
五、Hadoop的伪分布模式
1、特点:具备Hadoop的所有功能,在单机上模拟一个分布式的环境
(1)HDFS:主:NameNode,数据节点:DataNode
(2)Yarn:容器,运行MapReduce程序
主节点:ResourceManager
从节点:NodeManager
2、步骤:
(1)hdfs-site.xml
<!--配置HDFS的冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置是否检查权限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
(2)core-site.xml
<!--配置HDFS的NameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.88.11:9000</value>
</property>
<!--配置DataNode保存数据的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.4.1/tmp</value>
</property>
(3) mapred-site.xml
<!--配置MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(4) yarn-site.xml
<!--配置ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.88.11</value>
</property>
<!--配置NodeManager执行任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
(5) 格式化NameNode
hdfs namenode -format
日志:Storage directory /root/training/hadoop-2.4.1/tmp/dfs/name has been successfully formatted.
(6) 启动:start-all.sh
(*) HDFS: 存储数据
(*) Yarn:执行计算
(7) 访问:(*)命令行
(*)Java API
(*)Web Console:
HDFS:http://192.168.88.11:50070
Yarn:http://192.168.88.11:8088
HDFS的基本操作
1.HDFS的相关命令
-mkdir 在HDFS创建目录 hdfs dfs -mkdir /data
-ls 查看当前目录 hdfs dfs -ls /
-ls -R 查看目录与子目录
-put 上传一个文件 hdfs dfs -put data.txt /data/input
-moveFromLocal 上传一个文件,会删除本地文件:ctrl + X
-copyFromLocal 上传一个文件,与put一样
-copyToLocal 下载文件 hdfs dfs -copyToLocal /data/input/data.txt
-get 下载文件 hdfs dfs -get /data/input/data.txt
-rm 删除文件 hdfs dfs -rm /data/input/data.txt
-getmerge 将目录所有的文件先合并,再下载
-cp 拷贝: hdfs dfs -cp /data/input/data.txt /data/input/data01.txt
-mv 移动: hdfs dfs -mv /data/input/data.txt /data/input/data02.txt
-count 统计目录下的文件个数
-text、-cat 查看文件的内容 hdfs dfs -cat /data/input/data.txt
-balancer 平衡操作
2.HDFS的Java API
(1)在HDFS上创建一个目录:
依赖的jar包:
/root/training/hadoop-2.4.1/share/hadoop/common/lib
/root/training/hadoop-2.4.1/share/hadoop/common/
/root/training/hadoop-2.4.1/share/hadoop/hdfs/lib
/root/training/hadoop-2.4.1/share/hadoop/hdfs/
(2)代码(demo)
import java.io.IOException;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class TestHadoop {
public static void main(String[] args) throws Exception {
// 使用HDFS的API创建目录
// 设置NameNode地址
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.0.112:9000");
//得到HDFS的文件系统
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(new Path("/folder1"));
}