关于课程环境
- 课程环境为单节点集群,名称为 hadoopsinglenode,包括Hadoop/Spark/Hive/HBase/Flume/Sqoop。
- 这里的大数据集群的配置是减配的,如没有HA(高可用)、仅仅启动一部分功能组件和服务(daemon),以降低内存消耗(需要8G内存)。
- 本课程(大数据框架全栈(精简版))侧重于快速了解大数据的应用,因此不会出现诸如搭建等涉及底层原理的内容。
- 数据可视化环境参考《大数据框架全栈》"数据可视化分析"章节说明。
- 课程环境是定制的,根据高校的情况定制的,请联系松鼠学苑。
She平台高校版学生端网络设置
学生通过PC个人电脑的Chrome浏览器登录She平台高校版、具体网址由授课老师发布(但肯定不同于She平台C端版地址:http://she.kinginsai.com)。
She平台高校版通常部署在相应学校的机房环境中,学生PC个人电脑需要同时具备访问外网和访问学校机房环境的网络接入条件。
She平台高校版的资源
-
She平台C端版(http://she.kinginsai.com)的服务端有外网权限,所以松鼠学苑的标准课程均从资源的源端下载、如https://archive.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz;但通常She平台高校版的服务端没有外网权限(这个很容测试、如ping www.baidu.com),因此需要通过(http)文件服务器/gitlab服务器下载、或者从学生本地计算机上传的方式解决。
-
文件资源放在(http)文件服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用wget命令下载到实训环境中,因为文件服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署(http)文件服务器、或者(http)文件服务器中没有相应资源,可以在学生个人电脑端从互联网下载相应资源到本地,然后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
-
配置文件、代码等教学资源放在gitlab服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用git clone命令下载到实训环境中,因为gitlab服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署gitlab服务器、或者gitlab服务器中没有相应资源,可以在学生个人电脑端从松鼠学苑的github仓库(https://github.com/haiye1018/)下载相应资源到本地,压缩后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
关于课程环境
- 课程环境为单节点集群,名称为 hadoopsinglenode,包括Hadoop/Spark/Hive/HBase/Flume/Sqoop。
- 这里的大数据集群的配置是减配的,如没有HA(高可用)、仅仅启动一部分功能组件和服务(daemon),以降低内存消耗(需要8G内存)。
- 本课程(大数据框架全栈(精简版))侧重于快速了解大数据的应用,因此不会出现诸如搭建等涉及底层原理的内容。
- 数据可视化环境参考《大数据框架全栈》"数据可视化分析"章节说明。
- 课程环境是定制的,根据高校的情况定制的,请联系松鼠学苑。
She平台高校版学生端网络设置
学生通过PC个人电脑的Chrome浏览器登录She平台高校版、具体网址由授课老师发布(但肯定不同于She平台C端版地址:http://she.kinginsai.com)。
She平台高校版通常部署在相应学校的机房环境中,学生PC个人电脑需要同时具备访问外网和访问学校机房环境的网络接入条件。
She平台高校版的资源
-
She平台C端版(http://she.kinginsai.com)的服务端有外网权限,所以松鼠学苑的标准课程均从资源的源端下载、如https://archive.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz;但通常She平台高校版的服务端没有外网权限(这个很容测试、如ping www.baidu.com),因此需要通过(http)文件服务器/gitlab服务器下载、或者从学生本地计算机上传的方式解决。
-
文件资源放在(http)文件服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用wget命令下载到实训环境中,因为文件服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署(http)文件服务器、或者(http)文件服务器中没有相应资源,可以在学生个人电脑端从互联网下载相应资源到本地,然后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
-
配置文件、代码等教学资源放在gitlab服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用git clone命令下载到实训环境中,因为gitlab服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署gitlab服务器、或者gitlab服务器中没有相应资源,可以在学生个人电脑端从松鼠学苑的github仓库(https://github.com/haiye1018/)下载相应资源到本地,压缩后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
关于课程环境
- 课程环境为单节点集群,名称为 hadoopsinglenode,包括Hadoop/Spark/Hive/HBase/Flume/Sqoop。
- 这里的大数据集群的配置是减配的,如没有HA(高可用)、仅仅启动一部分功能组件和服务(daemon),以降低内存消耗(需要8G内存)。
- 本课程(大数据框架全栈(精简版))侧重于快速了解大数据的应用,因此不会出现诸如搭建等涉及底层原理的内容。
- 数据可视化环境参考《大数据框架全栈》"数据可视化分析"章节说明。
- 课程环境是定制的,根据高校的情况定制的,请联系松鼠学苑。
She平台高校版学生端网络设置
学生通过PC个人电脑的Chrome浏览器登录She平台高校版、具体网址由授课老师发布(但肯定不同于She平台C端版地址:http://she.kinginsai.com)。
She平台高校版通常部署在相应学校的机房环境中,学生PC个人电脑需要同时具备访问外网和访问学校机房环境的网络接入条件。
She平台高校版的资源
-
She平台C端版(http://she.kinginsai.com)的服务端有外网权限,所以松鼠学苑的标准课程均从资源的源端下载、如https://archive.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz;但通常She平台高校版的服务端没有外网权限(这个很容测试、如ping www.baidu.com),因此需要通过(http)文件服务器/gitlab服务器下载、或者从学生本地计算机上传的方式解决。
-
文件资源放在(http)文件服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用wget命令下载到实训环境中,因为文件服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署(http)文件服务器、或者(http)文件服务器中没有相应资源,可以在学生个人电脑端从互联网下载相应资源到本地,然后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
-
配置文件、代码等教学资源放在gitlab服务器上,可以阅读She平台手册的"She平台课程环境详细操作说明"部分,这样在学生可使用git clone命令下载到实训环境中,因为gitlab服务器和She平台是部署在同一内网中;如果对应高校版本中没有部署gitlab服务器、或者gitlab服务器中没有相应资源,可以在学生个人电脑端从松鼠学苑的github仓库(https://github.com/haiye1018/)下载相应资源到本地,压缩后上传到实训环境中,具体方法参考She平台手册的"ssh远程连接远端服务器工具"部分。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
创建并初始化环境
以下步骤是其它章节必须的步骤,只需要做一次即可,不能多次初始化。
1、第一步建立hadoopsinglenode。
2、New terminal.
3、切换到root用户。 命令:
sudo /bin/bash
4、进入hadoop目录。 命令:
cd /hadoop/
5、运行initHost.sh脚本,配置本机ip和名称(app-11)对应关系。 命令:
./initHosts.sh
6、切换到hadoop用户下,进入hadoop根目录。 命令:
su - hadoop
cd /hadoop/
7、启动环境。 命令:
./startAll.sh
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
1、切换到root用户。 命令:
sudo /bin/bash
2、切换到hadoop用户下。 命令:
su - hadoop
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
HDFS基本操作
1、运行hdfs命令查看子命令信息。 命令:
hdfs
注:主要打印出三类命令,管理命令、客户端命令、管理守护进程命令。
2、命令:
hdfs version
注:打印了Hadoop信息、源码信息、编译信息等。
3、命令:
hdfs classpath
注:打印classpath
4、命令:
hdfs getconf
注:打印getconf下的命令
5、打印namenode。 命令:
hdfs getconf -namenodes
注:单节点只有app-11(同时承担master/secondary)。
6、命令:
hdfs dfs
注:对Linux系统文件的操作。
HDFS文件操作
1、在根目录下创建一个文件。 命令:
hdfs dfs -mkdir /test2
2、将本地文件文件拷贝到test2下。 命令:
hdfs dfs -cp /hadoop/Hadoop/hadoop-3.1.2/etc/hadoop/*.xml /test2
3、查看是否拷贝成功。 命令:
hdfs dfs -ls /test2
4、先查看本地目录和文件。 命令:
pwd
ls
5、下载hdfs中文件到本地目录下。 命令:
hdfs dfs -get /test2/core-site.xml ./
ls
6、可以使用Linux命令查看改文件。 命令:
vi core-site.xml
友情提示:详细学习内容可观看Spark快速大数据处理——余海峰https://edu.csdn.net/course/detail/24205
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
HDFS基本操作
1、运行hdfs命令查看子命令信息。 命令:
hdfs
注:主要打印出三类命令,管理命令、客户端命令、管理守护进程命令。
2、命令:
hdfs version
注:打印了Hadoop信息、源码信息、编译信息等。
3、命令:
hdfs classpath
注:打印classpath
4、命令:
hdfs getconf
注:打印getconf下的命令
5、打印namenode。 命令:
hdfs getconf -namenodes
注:单节点只有app-11(同时承担master/secondary)。
6、命令:
hdfs dfs
注:对Linux系统文件的操作。
HDFS文件操作
1、在根目录下创建一个文件。 命令:
hdfs dfs -mkdir /test2
2、将本地文件文件拷贝到test2下。 命令:
hdfs dfs -cp /hadoop/Hadoop/hadoop-3.1.2/etc/hadoop/*.xml /test2
3、查看是否拷贝成功。 命令:
hdfs dfs -ls /test2
4、先查看本地目录和文件。 命令:
pwd
ls
5、下载hdfs中文件到本地目录下。 命令:
hdfs dfs -get /test2/core-site.xml ./
ls
6、可以使用Linux命令查看改文件。 命令:
vi core-site.xml
友情提示:详细学习内容可观看Spark快速大数据处理——余海峰https://edu.csdn.net/course/detail/24205
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
MR基本用例
下载程序
1、切换到/tmp目录下,并创建mr文件。(注:如果有,这个mr是之前在做Java例子时创建的,现在可以删除掉。) 命令:
mkdir mr
然后通过GitHub下载Spark-stack。 命令:git clone https://github.com/haiye1018/Spark-stack
注:对于高校版的学生请仔细阅读第一章第一节中"She平台高校版的资源"中的内容,git地址不上上面的;通常高校版服务端没有外网,访问不了上面地址。
2、进入Spark-stack/Hadoop/目录下。 命令:
cd Spark-stack/Hadoop/
3、将WordCount-python拷贝到/tmp/mr/目录下。 命令:
cp -r WordCount/* /tmp/mr/
4、打开org/apache/hadoop/examples目录下的WordCount.java文件。 命令:
5、因为现在是hadoop的集群环境中编译程序,而不是在idea中导出jar包,需要把包的信息注释。
代码解释
解析输入函数的输入参数、输入的路径、输出的路径。 创建Job,代表MapReduce的整个过程。
将多个输入文件或者路径加到job中
Key为行号、value为给map的每一行的字符串、context定义整个上下文环境。首先现将value变成string,再通过StringTokenizer方法变成一个个的单词存放在word中,再将word中出现的单词和频次存放到context中。
已经将map中的相同的key的内容集合到一起。将同一个key的多个做map的结果进行一个求和。
编译
1、设置环境变量HADOOP_CLASSPATH。
命令:
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
2、因为Java文件存放在WordCount/org/apache/hadoop/examples/目录下,所以进入该目录下。
命令:
3、进行编译。
命令:
hadoop com.sun.tools.javac.Main WordCount.java
注:会出现很多class文件。
4、将class文件打包,打包成一个可以执行的jar包。
命令:
jar cf WordCount.jar WordCount*.class
运行MapReduce
1、查看目录。
命令:
hdfs dfs -ls /
注:有一个安装路径installTest。
2、查看installTest目录。
命令:
hdfs dfs -ls /installTest
3、查看hadoop目录。
命令:
hdfs dfs -ls /installTest/Hadoop
注:data目录就是在安装时的目录,output是之前在做hadoop安装测试时的mapreduce任务。
4、查看data目录。
命令:
hdfs dfs -ls /installTest/hadoop/data
5、提交MapReduce程序。
命令:
hadoop jar WordCount.jar WordCount /installTest/hadoop/data /installTest/hadoop/output3
注:输入是/installTest/hadoop/data,输出是/installTest/hadoop/output3,确保输出是不存在的。map需要缓步启动,reduce需要map启动完才运行。
6、查看结果。
命令:
hdfs dfs -ls /installTest/hadoop/output3
7、结果在part-r-00000文件里。查看该文件。
命令:
hdfs dfs -cat /installTest/hadoop/output3/part-r-00000
前面的字符串是输入数据也就是data里出现过的字符串,数字是出现的次数。
友情提示:详细学习内容可观看Spark快速大数据处理——余海峰https://edu.csdn.net/course/detail/24205
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
Wordcount例子Python版本
下载程序
2、进入到tmp目录下。
命令:cd /tmp/
3、将mr是运行Java例子创建,我需要将mr全部删除。
命令:rm -rf mr/
4、再创建mr。
命令:mkdir mr
5、进入Spark-stack/Hadoop/目录。
命令:cd Spark-stack/Hadoop/
6、将WordCount-python文件拷贝到mr目录下。
命令:cp -r WordCount-python/* /tmp/mr/
7、确保Python正常安装。
命令:python –-version
注:我们的Python是2.7.5版本。
8、寻找streaming.jar的位置。
命令:find /hadoop/Hadoop/hadoop-3.1.2 -name "*streaming*.jar"
注:在hadoop的安装文件里寻找以streaming包括streaming,以.jar为结尾的文件。
9、在运行之前我们需要找到数据存储目录。
命令:hdfs dfs -ls /
10、数据存储在installTest/hadoop目录下。
命令:hdfs dfs -ls /installTest/Hadoop
11、进入到/tmp/mr目录下。
命令:cd /tmp/mr
12、在正式提交集群之前,我们可以做一个简单的测试,验证Python脚本的正确性。
命令:cat /hadoop/Hadoop/hadoop-3.1.2/etc/hadoop/hdfs-site.xml | python WordCountMapper.py | sort | python WordCountReducer.py
注:以hadoop的配置文件hdfs-site.xml为输入,依次运行Mapper、排序和Reducer
代码简析
从stdin中读取文本信息,将多余的空格去掉,化成一个个的单词,遍历每个单词,输出到流里。
从stdin中读取mapper的输出,再对相同key的value值累加,然后打印出每一个key总数。
运行
1、进行运行。
命令:hadoop jar hadoop/Hadoop/hadoop-3.1.2/share/hadoop/tools/lib/hadoop-streaming-3.1.2.jar \
、> -input /installTest/hadoop/data -output /installTest/hadoop/output5 \
、> -file /tmp/mr/WordCountMapper.py -file /tmp/mr/WordCountReducer.py \
、> -mapper WordCountMapper.py -reducer WordCountReducer.py
注:首先找到jar文件,空格加\可以多行输入,输入是data目录,输出是output5,确保输出目录是不存在的,将Mapper和Reducer放到文件缓存中,最后定义Mapper和Reducer。
2、先找到执行结果的文件。
命令:hdfs dfs -ls /installTest/hadoop/output5
3、查看执行结构文件。
命令:hdfs dfs -cat /installTest/hadoop/output5/part-00000
字符串是data输入中的字符串,数字是字符串出现的次数。
友情提示:详细学习内容可观看Spark快速大数据处理——余海峰https://edu.csdn.net/course/detail/24205
python操作hdfs
Jupyter开发环境
1、右侧打开Jupyter,并创建python3项目。
python操作hdfs例子
from pyhdfs import HdfsClient
#https://pypi.org/project/PyHDFS/
fs = HdfsClient(hosts=["app-11:9870"],user_name="hadoop")
print("client:",fs.list_status('/'))
fs.list_status('/')
fs.listdir('/tmp')
fs.create('/tmp/fruit/apple', 'delicious')
fs.copy_from_local(dest="/tmp/youtube.data", localsrc="/hadoop/Hadoop/hadoop-3.1.2/etc/hadoop/hdfs-site.xml")
fs.listdir('/tmp')
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
Hive是什么
Hive是大数据仓库的基本组件。右侧是用java写的MapReduce的Wordcount例子,使用SQL语句去实现数据的查询、数据的分析。左侧是SQL语句实现Wordcount,首先将每一行切开根据每一个单词Space,从file中hdfs文件,然后根据Word进行排列,这都是map形式,最后再计算每个Word的总量,根据Word进行Order。下方是将上方的语句分解为两个部分,将子查询单独开来,门槛较低,不用写java程序,也不需要调试。
这幅图是Wordcount的Python版本。左侧是Python的map和reduce。右侧是SQL语句实现。相对于SQL语句,Python也是复杂的。 所以说,用SQL语句作为大数据查询分析的语言,可以有效合理而且直观的组织和使用数据模型,以降低数据分析的门槛,这就是Hive能够发展起来的一个动力。但是,这并不说明其他语言的编程接口没有价值,它们所解决的层次是不一样的。在其他的数据处理框架,比如说,Spark、Flink都有对应的SQL语句相关的一些接口。SQL语句不仅仅可以在做批处理上用还可以进入动态表理论、流上使用SQL。并说明,不是其他语言做大数据处理没有价值,将会被SQL淘汰,因为解决问题的层次是不一样的,有一些问题,仍然需要java、Python这种表现力更丰富的语言去做处理。这些框架使用的语言任然是底层语言java语言来编写的,或者理解为用高级语言编写的数据处理效率会更高而且相应的框架会对原生的语言(java语言)支持或者融合度会更好。
Hive基本架构
Hive包括了三个部分,Hive的客户端、Hive的服务器、数据。Hive的客户端有三类,Thrift、JDBC、ODBC,通过客户端连接服务器,服务器经过一系列的Driver将查询驱动数据仓库,数据仓库是文件。Hive合作的事情是将在HDFS文件,一个个文件抽象成结构化数据的结构,然后用SQL语句去查询分析这些文件的内容。比如说做MapReduce,Hive的服务器将对应的查询SQL语言转化为一系列的MapReduce或者Tez以docker的形式提交给集群比如YARN集群去执行我们相应的数据处理程序。除了Hive Server之外,还可以通过Hive services提供的客户端,或者Web界面的形式去操作SQL语句。体系架构里面有个Metastore,是因为Hive上存的都是一个个文件,文件里是一行行数据或者一行行的记录。为了执行SQL语句,必须要了解数据的各式信息,所谓的元数据信息,这就是Metastore存的基本信息,它不存数据,数据存在HDFS里,Metastore存在关系型数据库里。
这是详细分析Metastore,可以有多个Metastore后端,MySQL是比较常用的,在Hive中提供了内置的Metastore,还有本地的方式也就是将MySQL部署在Hive Services所在的JVM的机器上,还支持远程的JVM去访问MySQL。将采用第三种方式,Hive Service不和MySQL在同一台机器上的部署方式。 Hive可以是计算引擎,唯一接触到数据的地方就是Metastore,存储的也仅仅是元数据,所有带分析的数据都存在的HDFS里面,由HDFS保证数据安全一致性。
和传统数据对比
Hive并不存储数据,仅仅存储元数据信息,数据都是以源文件的形式存储到HDFS中。在关系数据库中如果数据、描述丢失将很难恢复,但是在Hive中,HDFS数据没有丢失,Metastore丢失可以通过数据去恢复Metastore相对容易。 在传统的数据库中,表的模式是在数据加载时强制制定的。如果在加载时,发现数据不符合模式,加载肯定失败。Hive在查询时进行模式检查,在查询的时候才检查要查询的文件在元数据里面是否匹配,可以绕过Hive写入HDFS。这两种方法各有利弊,在Hive中是进入HDFS的,可以进行大数据量的。而传统的关系型数据库很难做到这一点。 性能不一样,Hive数据模式加载时非常快的,因为不需要检查数据格式信息,直接写到HDFS中。在传统数据中写入需要一条条的检查,但是有另一种优势,查询性能是非常高的,因为可以进行数据的索引。 传统型数据库是做事务处理的,Hive在做事务处理方面就不如传统数据库。Hive不支持更新、删除等。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
Hive是什么
Hive是大数据仓库的基本组件。右侧是用java写的MapReduce的Wordcount例子,使用SQL语句去实现数据的查询、数据的分析。左侧是SQL语句实现Wordcount,首先将每一行切开根据每一个单词Space,从file中hdfs文件,然后根据Word进行排列,这都是map形式,最后再计算每个Word的总量,根据Word进行Order。下方是将上方的语句分解为两个部分,将子查询单独开来,门槛较低,不用写java程序,也不需要调试。
这幅图是Wordcount的Python版本。左侧是Python的map和reduce。右侧是SQL语句实现。相对于SQL语句,Python也是复杂的。 所以说,用SQL语句作为大数据查询分析的语言,可以有效合理而且直观的组织和使用数据模型,以降低数据分析的门槛,这就是Hive能够发展起来的一个动力。但是,这并不说明其他语言的编程接口没有价值,它们所解决的层次是不一样的。在其他的数据处理框架,比如说,Spark、Flink都有对应的SQL语句相关的一些接口。SQL语句不仅仅可以在做批处理上用还可以进入动态表理论、流上使用SQL。并说明,不是其他语言做大数据处理没有价值,将会被SQL淘汰,因为解决问题的层次是不一样的,有一些问题,仍然需要java、Python这种表现力更丰富的语言去做处理。这些框架使用的语言任然是底层语言java语言来编写的,或者理解为用高级语言编写的数据处理效率会更高而且相应的框架会对原生的语言(java语言)支持或者融合度会更好。
Hive基本架构
Hive包括了三个部分,Hive的客户端、Hive的服务器、数据。Hive的客户端有三类,Thrift、JDBC、ODBC,通过客户端连接服务器,服务器经过一系列的Driver将查询驱动数据仓库,数据仓库是文件。Hive合作的事情是将在HDFS文件,一个个文件抽象成结构化数据的结构,然后用SQL语句去查询分析这些文件的内容。比如说做MapReduce,Hive的服务器将对应的查询SQL语言转化为一系列的MapReduce或者Tez以docker的形式提交给集群比如YARN集群去执行我们相应的数据处理程序。除了Hive Server之外,还可以通过Hive services提供的客户端,或者Web界面的形式去操作SQL语句。体系架构里面有个Metastore,是因为Hive上存的都是一个个文件,文件里是一行行数据或者一行行的记录。为了执行SQL语句,必须要了解数据的各式信息,所谓的元数据信息,这就是Metastore存的基本信息,它不存数据,数据存在HDFS里,Metastore存在关系型数据库里。
这是详细分析Metastore,可以有多个Metastore后端,MySQL是比较常用的,在Hive中提供了内置的Metastore,还有本地的方式也就是将MySQL部署在Hive Services所在的JVM的机器上,还支持远程的JVM去访问MySQL。将采用第三种方式,Hive Service不和MySQL在同一台机器上的部署方式。 Hive可以是计算引擎,唯一接触到数据的地方就是Metastore,存储的也仅仅是元数据,所有带分析的数据都存在的HDFS里面,由HDFS保证数据安全一致性。
和传统数据对比
Hive并不存储数据,仅仅存储元数据信息,数据都是以源文件的形式存储到HDFS中。在关系数据库中如果数据、描述丢失将很难恢复,但是在Hive中,HDFS数据没有丢失,Metastore丢失可以通过数据去恢复Metastore相对容易。 在传统的数据库中,表的模式是在数据加载时强制制定的。如果在加载时,发现数据不符合模式,加载肯定失败。Hive在查询时进行模式检查,在查询的时候才检查要查询的文件在元数据里面是否匹配,可以绕过Hive写入HDFS。这两种方法各有利弊,在Hive中是进入HDFS的,可以进行大数据量的。而传统的关系型数据库很难做到这一点。 性能不一样,Hive数据模式加载时非常快的,因为不需要检查数据格式信息,直接写到HDFS中。在传统数据中写入需要一条条的检查,但是有另一种优势,查询性能是非常高的,因为可以进行数据的索引。 传统型数据库是做事务处理的,Hive在做事务处理方面就不如传统数据库。Hive不支持更新、删除等。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
操作
1、查看Hive支持哪些命令。
命令:hive --help
2、查看环境变量里的hadoop配置。
命令:echo $HADOOP_HOME
3、启动客户端。
命令:hive 注:功能比较弱。不支持删除、自动补传等功能。
4、按Ctrl+c,退出。
5、不启用hive查询databases。
命令:hive -e "show databases"
6、使用静默参数,将结果输入文件中。
命令:hive -S -e "show databases" > /tmp/hai.txt
7、查看输出文件结果。
命令:cat /tmp/hai.txt
8、进入hive。
命令:hive --service cli
9、查看databases。
命令:show databases;
10、查看hdfs目录。
命令:dfs -ls / ;
11、退出。
命令:quit;
模拟hive启动失败
1、先删除HADOOP_HOME。
命令:unset HADOOP_HOME
2、查看环境变量。
命令:echo $HADOOP_HOME 注:因为删除了,所有空了。
3、删除Hadoop环境变量。
命令:export PATH=/hadoop/Hive/apache-hive-3.1.1-bin/bin:/hadoop/JDK/jdk1.8.0_131/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin
4、启动hive客户端。
命令:hive --service cli 注:启动失败。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节
HiveQL数据定义
1、启动hive。
命令:hive --service cli
定义这里为 hive命令行。
2、查看databases。
命令:show databases;
手动创建databases
3、创建test。
命令:CREATE DATABASE IF NOT EXISTS test;
4、查看是否创建成功。
命令:show databases;
5、进入test。
命令:use test;
6、创建employee表。
命令:CREATE TABLE IF NOT EXISTS `EMPLOYEE` ( `ID` bigint, `NAME` string, CONSTRAINT `SYS_PK_BUCKETING_COLS` PRIMARY KEY (`ID`) DISABLE ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' ;
注:``这个符号为标识符,数据名字。
下载数据
7、新建new terminal,保证当前shell的用户为hadoop。这里定义为Linux命令行。
参考第一章相关节
8、进入/tmp目录下。
命令:cd /tmp/
9、创建hive文件。
命令:mkdir hive
10、进入 /tmp/Spark-stack/Hive/HiveQL/目录下。
命令:cd /tmp/Spark-stack/Hive/HiveQL/
11、将employee.dat 拷贝到/tmp/hive/目录下。
命令:cp employee.dat /tmp/hive/
12、返回之前的hive命令行,加载数据到table中。
命令:LOAD DATA LOCAL INPATH '/tmp/hive/employee.dat' OVERWRITE INTO TABLE EMPLOYEE;
13、查询数据。
命令:select * from EMPLOYEE;
数据库与hdfs对应关系
观察创建完表和数据库之后,在HDFS上有什么变化 1、切换到Linux命令行。
2、配置文件默认的数据存储仓库在hive/warehouse/
命令:hdfs dfs -ls /user/hive/warehouse/
3、查看test.db文件
命令:hdfs dfs -ls /user/hive/warehouse/test.db
4、查看employee表。
命令:hdfs dfs -ls /user/hive/warehouse/test.db/employee
5、查看employee.dat数据集内容。
命令:hdfs dfs -cat /user/hive/warehouse/test.db/employee/employee.dat
内部表和外部表操作与hdfs文件管控
1、在Linux命令行下操作,将数据拷贝到/installTest目录下。
命令:hdfs dfs -cp /user/hive/warehouse/test.db/employee/employee.dat /installTest
2、在hive命令行下,删除表。
命令:drop table employee;
3、在Linux命令行下,再次查看。
命令:hdfs dfs -ls /user/hive/warehouse/test.db
注:数据已经删除了,但是test.db没有删除掉。
4、在hive命令行下,删除test.db。
命令:drop database test;
5、在Linux命令行下,查看是否删除。
命令:hdfs dfs -ls /user/hive/warehouse/test.db
注:已经删除,数据库已经被删除。
创建外部表
6、创建一个空目录存放数据。
在Linux命令行下,命令:hdfs dfs -mkdir /installTest/hive
7、在Linux命令行下,将拷贝过来的employee.dat拷贝到hive目录下。
命令:hdfs dfs -cp /installTest/employee.dat /installTest/hive
8、在hive命令行下,创建表,先创建database。
命令:CREATE DATABASE IF NOT EXISTS test;
9、在hive命令行下,进入test。
命令:use test;
10、在hive命令行下,创建表。
命令:CREATE TABLE IF NOT EXISTS `EMPLOYEE` ( `ID` bigint, `NAME` string, CONSTRAINT `SYS_PK_BUCKETING_COLS` PRIMARY KEY (`ID`) DISABLE ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/installTest/hive';
注:外部表创建成功。
11、在hive命令行下,做一次查询。
命令:select * from EMPLOYEE;
注:内部表和外部表在其他操作上是一致的。
HiveQL查询
12、在hive命令行下,在app-12上退出命令行环境。
命令:quit;
13、进入tmp目录下。
命令:cd /tmp/
14、将hive文件删除重新创建存放临时数据。
命令:rm -rf hive/
、mkdir hive
15、进入Spark-stack/Hive/目录下。
命令:cd Spark-stack/Hive/
16、将HiveQL目录下的文件拷贝到/tmp/hive/目录下。
命令:cp -rf HiveQL/* /tmp/hive/
17、进入/tmp/hive/目录下。
命令:cd /tmp/hive/
18、查看employee.sql脚本
命令:vi employee.sql
注:这是创建外部表的脚本。
19、加载脚本。
命令:hive -f /tmp/hive/employee.sql
20、切换到命令行环境。
命令:hive --service cli
21、进入test。
命令:use test;
22、设置MapReduce的Map memory和reduce memory为2G。
命令:set mapreduce.map.memory.mb=2048;
、set mapreduce.reduce.memory.mb=2048;
23、查询。
命令:select count(*) from employee;
注:时间是4.38秒。
24、查询现在的执行引擎。
命令:set hive.execution.engine;
25、将执行引擎改为mr。
命令:set hive.execution.engine=mr;
26、再一次查询。
命令:select count(*) from employee;
注:时间是10.55秒。
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
深入理解Hive视频教程1
深入理解Hive视频教程2
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
python操作hive
Jupyter开发环境
1、右侧打开Jupyter,并创建python3项目。
python操作hive例子
from pyhive import hive
import pandas as pd
def read_jdbc(host, database: str, table: str, query_sql: str) -> pd.DataFrame:
# 1、连接hive服务端
conn = hive.Connection(
host=host, port=10000, database=database)
cursor = conn.cursor()
print('connect hive successfully.')
# 2、执行hive sql
cursor.execute(query_sql)
print('query hive table successfully.')
# 3、返回pandas.dataframe
table_len = len(table) + 1
columns = [col[0] for col in cursor.description]
col = list(map(lambda x: x[table_len:], columns))
result = cursor.fetchall()
return pd.DataFrame(result, columns=col)
read_jdbc('app-11', 'test', 'employee', 'select * from employee')
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
HBase原理
HBase是什么
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable使用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为协同服务。
与传统数据库的对比
1、传统数据库遇到的问题:
1)数据量很大的时候无法存储; 2)没有很好的备份机制; 3)数据达到一定数量开始缓慢,很大的话基本无法支撑;
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑; 2)数据存储在hdfs上,备份机制健全; 3)通过zookeeper协调查找数据,访问速度快。
HBase集群中的角色
一个或者多个主节点,Hmaster;
多个从节点,HregionServer;
HBase依赖项,zookeeper;
HBase数据模型
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
表是行的集合。
行是列族的集合。
列族是列的集合。
列是键值对的集合。
这里的列式存储或者说面向列,其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
HBase 和 RDBMS的比较
Row Key 行键
与nosql数据库一样,row key是用来表示唯一一行记录的主键,HBase的数据时按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。访问HBASE table中的行,只有三种方式:
通过单个row key访问;
通过row key的range(正则)
全表扫描
Row key 行键(Row key)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-1000bytes),在HBASE内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
Columns Family 列族
列簇:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses这个列族。
Cell
由{row key,columnFamily,version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储。
Time Stamp 时间戳
HBASE中通过rowkey和columns确定的为一个存储单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBASE提供了两种数据版本回收方式。一是保存数据的最后n个版本,而是保存最近一段时间内的版本(比如最近7天)。用户可以针对每个列族进行设置。
HBase系统架构体系
HBase原理
HBase是什么
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable使用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为协同服务。
与传统数据库的对比
1、传统数据库遇到的问题:
1)数据量很大的时候无法存储; 2)没有很好的备份机制; 3)数据达到一定数量开始缓慢,很大的话基本无法支撑;
2、HBASE优势:
1)线性扩展,随着数据量增多可以通过节点扩展进行支撑; 2)数据存储在hdfs上,备份机制健全; 3)通过zookeeper协调查找数据,访问速度快。
HBase集群中的角色
一个或者多个主节点,Hmaster;
多个从节点,HregionServer;
HBase依赖项,zookeeper;
HBase数据模型
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
表是行的集合。
行是列族的集合。
列族是列的集合。
列是键值对的集合。
这里的列式存储或者说面向列,其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
HBase 和 RDBMS的比较
Row Key 行键
与nosql数据库一样,row key是用来表示唯一一行记录的主键,HBase的数据时按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。访问HBASE table中的行,只有三种方式:
通过单个row key访问;
通过row key的range(正则)
全表扫描
Row key 行键(Row key)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-1000bytes),在HBASE内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
Columns Family 列族
列簇:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses这个列族。
Cell
由{row key,columnFamily,version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储。
Time Stamp 时间戳
HBASE中通过rowkey和columns确定的为一个存储单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBASE提供了两种数据版本回收方式。一是保存数据的最后n个版本,而是保存最近一段时间内的版本(比如最近7天)。用户可以针对每个列族进行设置。
HBase系统架构体系
保证当前shell的用户为hadoop(如果当前用户已经是hadoop,此步可忽略)
参考第一章相关节。
HBase基本操作
1、启动HBase终端 命令:hbase shell
2、查看HBase运行状态 命令:status
3、创建一个User表,并且有一个info列族 命令:create 'User','info'
4、查看所有表 命令:list
5、查看User表的详情 命令:describe 'User'
6、判断User表是否存在 命令:exists 'User'
判断Stu表是否存在 命令:exists 'Stu'注:不存在
7、启动或禁用表 命令:is_disabled 'User'
命令:is_enabled 'User'
8、添加记录,即插入数据 命令:
put 'User','row1','info:name','xiaoming'
put 'User','row2','info:age','18'
put 'User','row3','info:sex','man'
9、根据rowKey查询某个记录 命令:
get 'User','row2'
get 'User','row3','info:sex'
get 'User','row1',{COLUMN=> 'info:name'}
10、查询所有记录 命令:scan 'User'
11、查询前2条 命令:scan 'User',{LIMIT => 2}
12、范围查找 命令:scan 'User',{STARTROW => 'row2',ENDROW => 'row3'}
13、统计表记录 命令:count 'User'
14、删除列 命令:delete 'User','row1','info:age'
15、删除行 命令:deleteall 'User','row2'
16、删除User表中的内容 命令:truncate 'User'
17、禁用表 命令:
disable 'User'
describe 'User'
18删除表 命令:drop 'User' 注:在删除表之前要先禁用表
python操作hbase
Jupyter开发环境
1、右侧打开Jupyter,并创建python3项目。
python操作hbase例子
import happybase
def connectHBase():
#创建和hbase的连接
connection = happybase.Connection('app-11')
#获取hbase中的所有表
print(connection.tables())
#关闭连接
connection.close()
def createTable():
connection = happybase.Connection('app-11')
connection.create_table('user',{'cf1': dict()})
print(connection.tables())
connection.close()
def scanQuery():
# 创建和hbase的连接
connection = happybase.Connection('app-11')
#通过connection找到user表 获得table对象
table = connection.table('user')
filter = "ColumnPrefixFilter('username')"
#row_start 指定起始rowkey 缩小查询范围
#filter 添加过滤器
for key,value in table.scan(row_start='rowkey_10',filter=filter):
print(key,value)
# 关闭连接
connection.close()
def getQuery():
connection = happybase.Connection('app-11')
# 通过connection找到user表 获得table对象
table = connection.table('user')
result = table.row('rowkey_22',columns=['base_info:username'])
#result = table.row('rowkey_22',columns=['base_info:username'])
result = table.rows(['rowkey_22','rowkey_16'],columns=['base_info:username'])
print(result)
# 关闭连接
connection.close()
def insertData():
connection = happybase.Connection('app-11')
# 通过connection找到user表 获得table对象
table = connection.table('user')
table.put('rk_01',{'cf1:address':'beijing'})
# 关闭连接
for key,value in table.scan():
print(key,value)
connection.close()
def deleteData():
connection = happybase.Connection('app-11')
# 通过connection找到user表 获得table对象
table = connection.table('user')
table.delete('rk_01',['cf1:username'])
# 关闭连接
for key,value in table.scan():
print(key,value)
connection.close()
def deletetable():
#创建和hbase的连接
connection = happybase.Connection('app-11')
#获取hbase中的所有表
connection.delete_table('user',disable=True)
print(connection.tables())
#关闭连接
connection.close()
connectHBase()
createTable()
scanQuery()
insertData()
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
Linux操作系统和Python语言快速入门
详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
学苑网课中心
松鼠学苑发展历程
主营业务
She教研解决方案
1、远端浏览器,从Google、GitHub、Maven等获取技术资源不再有羁绊。
2、基于Devfile的、一键式、无差别构建,基于账号的隔离独享环境,基于浏览器的全新开发模式,让你和你的 小伙伴的软件工程环境精准的一致,而且能随心所欲的创建一个新的属于你的环境。
3、全系列、分步骤镜像,让你的大数据能够从任一成功阶段继续,从裸Linux到Zookeeper、Hadoop、Tez、 Hive、Spark、Oozie、HBase,到Kafka、Flink、Ambari,All in One的Jupyter,最新版本的TensorFlow, 使用你擅长的任一语言,Python、Java、Scala、R、Julia。
4、无需任何配置,只要bind任一端口,你的应用便自动地expose出去,自动配置域名。
She平台架构
She是构建在docker/k8s之上、用于软件开发调试的大数据平台,平 台本身是架构在大数据集群之上的分布式系统,包括三层:计算资源管 理层、She核心调度层、应用层,应用层集合了所有课程环境,Devfile 和Workspace是其中两个核心概念:
1.Devfile是开展某项软件类开发任务所需环境的定义,那么将这个草稿 建设起来的就是Workspace,即Workspace是物理的、而Devfile是逻辑 的、是静态的:Workspace包括了物理上运行的各容器或物理机实体、端 口、命名等一干看得见摸得着的资源,所以Devfile定义了某个实训任务 的资源需求情况,如CPU、GPU、Memory、Disk等,而运行中的Work space的则实际占有了这些资源,因此,从这个意义上看,具体的实训 任务决定了She平台的硬件配置需求。
2.Devfile是She平台的预置环境,即其对应的Workspace中已经安装了 一系列版本号确定的工具,这些工具集的选择是根据这项开发任务的通 用需求而定的,是通用的;但是我们可以根据需要卸载、升级、安装相 应工具。
HFS三节点集群拓扑结构
为了降低实训成本,我们以三节点为例搭建HFS集群,但这个集群理论上可以水平扩展到10万点的规模。