《大数据技术与应用》课程相关实验

主要内容:

  • 使用 VMWare Workstation pro安装 CentOS 7.6,安装并配置 Hadoop,实现伪分布式与分布式部署
  • 启动自带MapReduce示例程序 WordCount
  • 编写程序,利用 Hadoop 的 Java API 实现简单的文件系统读写功能
  • 编写程序,利用 Hadoop 的 Java API 实现启动自带MapReduce示例程序 WordCount
  • 安装并配置 Hbase,编写程序,利用HBase 的 Java API 实现简单的CRUD操作
  • 安装 Redis、MongoDB,了解其基本操作(不检查)
  • 安装并配置 Hive、MySQL 及其 JDBC 驱动,编写 HiveSQL 语句实现简单的CRUD操作
  • 安装并配置 Spark 及 Scala 语言环境,熟悉 Spark Shell,并分别使用 Scala 语言和 Spark 语言编写 WordCount 并执行

环境说明

VMWare Workstation pro 版本:15.0.4(目前的最新版,其他版本没试过,最好用最新的)

CentOS 版本:7.6(目前的最新版,老版本镜像使用 yum -y update 也是能升到最新版的)

JDK 版本:8u211-linux-x64

Hadoop 版本:2.7.7(个人认为是目前最佳的学习用的版本了)

HBase 版本:1.4.9(目前最新的 stable 版本)

Hive 版本:2.3.4

MySQL 版本:5.7.25

Scala 版本:2.12.8

Spark 版本:2.4.2

VMWare 激活码可以试试这个(不保证一定能用):ZC10K-8EF57-084QZ-VXYXE-ZF2XF

部分实验的 Java 代码:https://github.com/oo0oo2015/HDFSTest

 


安装 CentOS 7.6 并进行相关配置

安装过程略,注意将虚拟机的网络适配器选为“自定义”中的“VMnet8(NAT模式)”。

须进行的配置如下:

  • 配置静态IP

【编辑】→【虚拟网络编辑器】→VMnet8,记下子网IP、子网掩码

点击【NAT设置】,记下网关IP

 

然后以root身份登入CentOS,修改网卡配置文件(注意 ifcfg-ens33 是网卡名,请根据自己的实际情况修改):

vi /etc/sysconfig/network-scripts/ifcfg-ens33

将 BOOTPROTO=DHCP 改为 BOOTPROTO=static

将 ONBOOT=no 改为 ONBOOT=yes

在最后面添加:

指定的 IP 地址(任取,须保证在你的子网网段范围内且不能与网关相同):IPADDR

子网掩码:NETMASK

默认网关:GATEWAY

DNS1:DNS1

保存并退出,然后重启网络服务:

systemctl restart network
  • 把系统升级到最新版本:
yum -y update
  • 安装常用工具:
yum -y install net-tools wget vim
  • 关闭防火墙
# 关闭防火墙
systemctl stop firewalld

# 禁止防火墙开机自启
systemctl disable firewalld
  • 使用 XShell 连接该机器(方便复制粘贴命令),使用XFtp把那些要装的软件传上去(建议放到 /usr/local/tools 文件夹,方便统一管理,文件夹不存在就新建一下)

 


安装及配置JDK

下载:https://www.oracle.com/technetwork/java/javase/downloads/index.html

安装(注意,如无特别说明,其他CentOS下的软件的安装方法也都是这样):

# rmp包安装方法
rpm -ivh jdk-8u211-linux-x64.rpm

# tar.gz(二进制包)安装方法
# 注意:不是说tar.gz格式的就都是二进制包,也有些是源码包,要自行编译,请注意区分
tar -zxvf jdk-8u211-linux-x64.tar.gz

配置环境变量

vim /etc/profile

最后面添加(注意根据实际情况修改):

export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
export PATH=$JAVA_HOME/bin:$PATH

使其生效:

source /etc/profile

之后各个软件的环境变量也是这么配置,请悉知。

 


安装及配置Hadoop

下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz

文档:https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/SingleCluster.html

按照官方文档的意思来就行,可以完成Hadoop的安装、配置单节点模式并运行 WordCount 、配置伪分布式

注意,要先手动配置 hadoop-env.sh 中的 JAVA_HOME:

# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64

完全分布式建议参考这篇文章:https://blog.csdn.net/frank409167848/article/details/80968531

另外伪分布式配置的配置文件中 core-site.xml 文件那里不要使用 hdfs://localhost:9000 ,须使用 hdfs://机器名:9000,并配置系统的 hosts 文件(/etc/hosts),在 hosts 文件末行添加

本机IP 机器名

这条记录。

另外没改机器名的需要先改一下机器名,方法如下:

vim /etc/hostname

将原名称删除后换成你指定的机器名。

 


安装及配置HBase

下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz

文档:https://hbase.apache.org/book.html

按照官方文档的意思来就行,可以完成HBase的安装、配置

注意配置 hbase-site.xml 时还需要解除 export HBASE_MANAGES_ZK=true 的注释

注意配置hbase-site.xml 文件时 hbase.rootdir 那里要配置在 HDFS 实例,而非本机的文件系统中,参见:

 (其实就是设成 Hadoop 的 core-site.xml 配置文件中 fs.defaultFS 配置的值)

且不需要配置 hbase.zookeeper.property.dataDir 、hbase.zookeeper.quorum 和 hbase.unsafe.stream.capability.enforce,同时需按照 2.3. Pseudo-Distributed Local Install 小节的要求配置成伪分布式,最终效果如下:

 

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://bigdata:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
</configuration>

 


安装Redis和MongoDB

这两个软件了解并简单尝试即可,试过之后可以删了,后面可能用不到了,以后上课用到了再补上。

Redis:

下载及安装(安装方法在页面下边,这软件要你自己在机器上编译):https://redis.io/download

文档(好像没有Quick Start Guide,如果只是试用一下的话直接百度吧):https://redis.io/documentation

MongoDB:

文档(下载安装方法都在里面了):https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

 


安装并配置 Hive、MySQL 及其 JDBC 驱动

Hive:

下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz

文档:https://cwiki.apache.org/confluence/display/Hive/GettingStarted

注意配置环境变量那儿建议直接配置到全局变量( /etc/profile )上

至此 Hive 安装完成。

现在,需要一个外部数据库服务器配置 Metastore。这里我们使用 MySQL 数据库。

至于为什么要使用 MySQL 而不是 Derby,可以参考博主“菜鸟级的IT之路”对其的解释:

Hive 安装选择mysql 而不是 Derby的原因

   Hive 将元数据存储在 RDBMS 中,一般常用 MySQL 和 Derby。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。

内置的derby主要问题是并发性能很差,可以理解为单线程操作。

Derby还有一个特性。更换目录执行操作,会找不到相关表等
比如在/usr下执行创建表,在/usr下可以找到这个表。在/etc下执行查找这个表,就会找不到 。
--------------------- 
作者:菜鸟级的IT之路 
来源:CSDN 
原文:https://blog.csdn.net/wypersist/article/details/80101617 
版权声明:本文为博主原创文章,转载请附上博文链接!

注意这一步我们在这里需要配置的是MySQL,所以做到这步的时候先停一下,先去把MySQL装好:

装好并设置好MySQL的 root 账户的密码后就可以尝试使用 Windows 上的 Navicat 之类的可视化工具连接该数据库了。连接好后创建一个名为 hive 的数据库,字符集选择 utf-8 ,排序规则选择 utf8_general_ci (当然你也可以直接使用 Linux 下的 MySQL 命令行客户端创建该数据库: CREATE DATABASE hive DEFAULT CHARACTER SET utf8;)。

接下来开始配置 hive:

先在 hive 主目录下新建名为 iotmp 和 tmp 的文件夹:

mkdir /usr/local/hive/apache-hive-2.3.4-bin/iotmp
mkdir /usr/local/hive/apache-hive-2.3.4-bin/tmp

① 配置 hive-env.sh:

cd /usr/local/hive/apache-hive-2.3.4-bin/conf
cp hive-env.sh.template hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hive/apache-hive-2.3.4-bin/conf

② 配置 hive-site.xml:

cp hive-default.xml.template hive-site.xml

数据库连接配置说明:
javax.jdo.option.ConnectionURL:JDBC连接字符串
javax.jdo.option.ConnectionDriverName:JDBC驱动名称
javax.jdo.option.ConnectionUserName:指定数据库用户名
javax.jdo.option.ConnectionPassword:指定数据库用户密码

分别找到这几处参数,进行配置,如下所示:

  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://127.0.0.1:3306/hive?characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>Aa123456!</value>
    <description>password to use against metastore database</description>
  </property>

最后找到以下参数,进行如下配置:

  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive/apache-hive-2.3.4-bin/tmp/${user.name}</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/usr/local/hive/apache-hive-2.3.4-bin/iotmp/${hive.session.id}_resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>

  <property>
    <name>hive.querylog.location</name>
    <value>/usr/local/hive/apache-hive-2.3.4-bin/iotmp/${system:user.name}</value>
    <description>Location of Hive run time structured log file</description>
  </property>

  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/usr/local/hive/apache-hive-2.3.4-bin/iotmp/${system:user.name}/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
  </property>

  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>bigdata</value>
    <description>Bind host on which to run the HiveServer2 Thrift service.</description>
  </property>


# 还需要在开头处添加以下配置:
  <property>
    <name>system:java.io.tmpdir</name>
    <value>/usr/local/hive/apache-hive-2.3.4-bin/iotmp</value>
    <description/>
  </property>

 

完成后你还需要将 MySQL的 JDBC 驱动 mysql-connector-java-8.0.15.jar 复制到 /usr/local/hive/apache-hive-2.3.4-bin/lib 文件夹中。

最后,按照官方教程指示,执行以下命令:

schematool -dbType mysql -initSchema

至此就完成了使用外部 MySQL 数据库服务器配置 Metastore 的全过程,控制台结果输出如下:

[root@bigdata apache-hive-2.3.4-bin]# schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.3.4-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://127.0.0.1:3306/hive?characterEncoding=UTF-8&serverTimezone=UTC
Metastore Connection Driver :	 com.mysql.cj.jdbc.Driver
Metastore connection User:	 root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

数据库中也有了元数据表:

编写 HiveQL 语句,实现数据库、表、视图的基本操作:

运行hiveser2和beeline (根据官方文档描述,Hive cli 现在已被弃用,取而代之的是 HiveServer2 自己的 Beeline )。在此之前,还需要向 Hadoop 的配置文件 core-site.xml 中加入以下内容:

  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>

  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>

然后重启Hadoop,完成后启动 hiveserver2:

hiveserver2

另开一个新 Terminal,打开 beeline(第一次打开可能会提示Permission Denied,关闭后再重开一次即可):

beeline -u jdbc:hive2://bigdata:10000 -n root

成功执行的话将进入 beeline:

[root@bigdata ~]# beeline -u jdbc:hive2://bigdata:10000
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.3.4-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://bigdata:10000
Connected to: Apache Hive (version 2.3.4)
Driver: Hive JDBC (version 2.3.4)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.4 by Apache Hive
0: jdbc:hive2://bigdata:10000> 

进行测试:

创建数据库:

0: jdbc:hive2://bigdata:10000> CREATE DATABASE userdb;
No rows affected (0.177 seconds)
0: jdbc:hive2://bigdata:10000> SHOW DATABASES;
+----------------+
| database_name  |
+----------------+
| default        |
| userdb         |
+----------------+
2 rows selected (0.106 seconds)

创建表:

0: jdbc:hive2://bigdata:10000> USE userdb;
No rows affected (0.119 seconds)
0: jdbc:hive2://bigdata:10000> CREATE TABLE pokes (foo INT, bar STRING);
No rows affected (0.182 seconds)
0: jdbc:hive2://bigdata:10000> SHOW TABLES;
+-----------+
| tab_name  |
+-----------+
| pokes     |
+-----------+
1 row selected (0.132 seconds)

 

编写 HiveQL 语句实现 WordCount 程序:

参考:

http://www.divcss5.com/shili/s50875.shtml

先把要统计的文件传到 HDFS 上:

[root@bigdata ~]# vim 1.txt
[root@bigdata ~]# hdfs dfs -mkdir /input
[root@bigdata ~]# hdfs dfs -put 1.txt /input
[root@bigdata ~]# hdfs dfs -ls /input
Found 1 items
-rw-r--r--   1 root supergroup      20799 2019-04-24 22:24 /input/1.txt

打开 beeline,创建内部表 words:

0: jdbc:hive2://bigdata:10000> create table words(line string);
No rows affected (0.192 seconds)

导入文章内容:

0: jdbc:hive2://bigdata:10000> load data inpath '/input/1.txt' overwrite into table words;
No rows affected (0.557 seconds)

执行 WordCount 操作,将结果保存到新表 wordcount 中:

0: jdbc:hive2://bigdata:10000> create table wordcount as select word, count(1) as count from (select explode(split(line,' '))as word from words) w group by word order by word;
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
No rows affected (43.34 seconds)

查看统计结果:

0: jdbc:hive2://bigdata:10000> select * from wordcount;
+---------------------------------------------+------------------+
|               wordcount.word                | wordcount.count  |
+---------------------------------------------+------------------+
|                                             | 1136             |
| "AS                                         | 2                |
| "Contribution"                              | 1                |
| "Contributor"                               | 1                |
| "Derivative                                 | 1                |
| "Legal                                      | 1                |
| "License"                                   | 1                |
| "License");                                 | 1                |
| "Licensor"                                  | 1                |
| "NOTICE"                                    | 1                |
| "Not                                        | 1                |
| "Object"                                    | 1                |
| "Source"                                    | 1                |
| "Work"                                      | 1                |
| "You"                                       | 1                |
| "Your")                                     | 1                |
| "[]"                                        | 1                |

...(剩余内容省略)

附:

Hive Web UI 端口:10002

Hive 客户端可视化工具 Oracle SQL Developer 使用说明:https://blog.csdn.net/chengyuqiang/article/details/80485505

连接效果:


MySQL:

下载(这个下的是MySQL的Yum Repository):https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

安装与配置:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

注意做完这步就可以了:

附:

MySQL JDBC 驱动下载地址:https://dev.mysql.com/downloads/connector/j/

下载时选择“Platform Independent”,提取压缩包内的 jar 文件即可。


安装 Spark,使用 Scala 语言编写程序实现特定功能

Scala

在 CentOS 中安装 Scala 环境的方法很多,这里选择 rpm 包的方式安装。

下载:https://downloads.lightbend.com/scala/2.12.8/scala-2.12.8.rpm

 

Spark

下载:https://www.apache.org/dyn/closer.lua/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz

文档:http://spark.apache.org/docs/latest/

伪分布式配置:

Spark 的伪分布式其实就是在配置文件中指定一些基础配置。进入 conf 文件夹,复制配置文件模板:

cp spark-env.sh.template spark-env.sh

修改 spark-env.sh:

export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
export SCALA_HOME=/usr/share/scala
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.7/etc/hadoop
export SPARK_MASTER_HOST=bigdata
export SPARK_MASTER_PORT=7077
export  LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

然后为 Spark 配置环境变量 SPARK_HOME ,并将其 bin 目录加入 path,

此外,还需配置 LD_LIBRARY_PATH 避免 Hadoop 依赖问题:

export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HBASE_HOME=/usr/local/hbase/hbase-1.4.9
export HIVE_HOME=/usr/local/hive/apache-hive-2.3.4-bin
export SPARK_HOME=/usr/local/spark/spark-2.4.2-bin-hadoop2.7
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$PATH

保存并执行 source /etc/profile 使其生效。

结束后分别执行 start-dfs.sh 和 start-yarn.sh 启动 Hadoop;

最后,进入Spark 的 sbin 目录执行 start-all.sh 启动 spark:

./start-all.sh

使用 jps 命令查看进程:

[root@bigdata sbin]# jps
10005 NameNode
10151 DataNode
10535 ResourceManager
12455 Jps
10345 SecondaryNameNode
12282 Worker
10653 NodeManager
12191 Master

启动 Spark Shell :

[root@bigdata spark-2.4.2-bin-hadoop2.7]# ./bin/spark-shell
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://bigdata:4040
Spark context available as 'sc' (master = local[*], app id = local-1557543612970).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.2
      /_/
         
Using Scala version 2.12.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_211)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

 

WordCount

参考:Spark2.1.0入门:第一个Spark应用程序:WordCount_厦大数据库实验室博客

按这个博客的步骤执行就行。

在 CentOS 中打包要先安装 sbt ,下载链接:

https://sbt.bintray.com/rpm/sbt-1.2.8.rpm

安装后运行一次 sbt 命令,会开始下载依赖包,但特别慢,解决办法:

https://blog.csdn.net/wawa8899/article/details/74276515

 

1、在 Spark Shell 使用本地文件进行统计,结果如下:

scala> val textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
textFile: org.apache.spark.rdd.RDD[String] = file:///usr/local/spark/mycode/wordcount/word.txt MapPartitionsRDD[8] at textFile at <console>:24

scala> val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[11] at reduceByKey at <console>:25

scala> wordCount.collect()
res4: Array[(String, Int)] = Array((under,9), (Unless,3), (Contributions),1), (offer,1), (NON-INFRINGEMENT,,1), (agree,1), (its,3), (event,1), (intentionally,2), (Grant,2), (have,2), (include,3), (responsibility,,1), (writing,1), (MERCHANTABILITY,,1), (Contribution,3), (express,2), ("Your"),1), ((i),1), (However,,1), (files;,1), (been,2), (This,1), (stating,1), (conditions.,1), (non-exclusive,,2), (appropriateness,1), (marked,1), (risks,1), (any,28), (IS",2), (filed.,1), (Sections,1), (fee,1), (losses),,1), (out,1), (contract,1), (from,,1), (4.,1), (names,,1), (documentation,,2), (contract,,1), (unless,1), (below).,1), ([name,1), (verbal,,1), (ANY,2), (version,1), (file.,1), (are,6), (no-charge,,2), (2.,1), (assume,1), (reproduction,,3), (file,6), (offer,,1), (...

2、在 CentOS中 编写 WordCount 程序,在 Spark Shell 中执行程序:

[root@bigdata scala-2.12]# spark-submit --class "WordCount"  /usr/local/spark/mycode/wordcount/target/scala-2.12/simple-project_2.12-1.0.jar
...
...
(under,9)
(Contributor,8)
(owner,4)
(executed,1)
(For,3)
(Unless,3)
(Contributions),1)
(modifications,,3)
(reproduce,,1)
(The,2)
(offer,1)
(NON-INFRINGEMENT,,1)
(agree,1)
(legal,1)
(its,3)
(event,1)
(informational,1)
((50%),1)
((or,3)
("Contributor",1)
(document.,1)
(work.,1)
(intentionally,2)
(Grant,2)
(have,2)
...
...

3、编写 Java 版的 WordCount 程序并执行:

代码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;

import java.util.Arrays;

public class JavaWordCount {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("Spark WordCount written by java!");

        JavaSparkContext sc = new JavaSparkContext(conf);
        
        // 在这里指定 hdfs 中的 待统计文件目录
        JavaRDD<String> textFile = sc.textFile("hdfs:///dit/1.txt");
        JavaPairRDD<String, Integer> counts = textFile
                .flatMap(s -> Arrays.asList(s.split(" ")).iterator())
                .mapToPair(word -> new Tuple2<>(word, 1))
                .reduceByKey((a, b) -> a + b);
        // 在这里指定输出结果存储位置
        counts.saveAsTextFile("hdfs:///dit/result");
        sc.close();
    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>wang.oo0oo</groupId>
    <artifactId>sparktest</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.3</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <mainClass>JavaWordCount</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>assembly</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>8</source>
                        <target>8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

打包后上传到 CentOS 中,执行以下命令:

./bin/spark-submit --class JavaWordCount --master spark://bigdata:7077 /usr/local/spark/mycode/sparktest-1.0.jar

输出结果在 HDFS 看。

注:运行时若提示 hdfs 正在安全模式,可使用以下命令关闭安全模式:

hadoop dfsadmin -safemode leave

 

附:

Spark 管理 Web UI:8080

 

Spark context Web UI:4040

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值