版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGE課程名稱:大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)項(xiàng)目: 大數(shù)據(jù)平臺實(shí)驗(yàn)儀器: PC機(jī) 學(xué)院: 計(jì)算機(jī)學(xué)院專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)班級姓名: *學(xué)號: *日期: 2019-5-9 指導(dǎo)教師: * 成績: 實(shí)驗(yàn)?zāi)康?.熟練掌握大數(shù)據(jù)計(jì)算平臺相關(guān)系統(tǒng)的安裝部署2.理解大數(shù)據(jù)MapReduce計(jì)算模型,并掌握MapReduce程序開發(fā)3.掌握Hive的查詢方法4.掌握Spark的基本操作實(shí)驗(yàn)內(nèi)容1.Hadoop完全分布模式安裝2.Hadoop開發(fā)插件安裝3.MapReduce代碼實(shí)現(xiàn)4.Hive安裝部署5.Hive查詢6.SparkStandalone模式安裝7.SparkShell操作實(shí)驗(yàn)過程Hadoop開發(fā)插件安裝實(shí)驗(yàn)步驟: 1.Eclipse開發(fā)工具以及Hadoop默認(rèn)已經(jīng)安裝完畢,安裝在/apps/目錄下。2.在Linux本地創(chuàng)建/data/hadoop3目錄,用于存放所需文件。切換目錄到/data/hadoop3目錄下,并使用wget命令,下載所需的插件hadoop-eclipse-plugin-2.6.0.jar。將插件hadoop-eclipse-plugin-2.6.0.jar,從/data/hadoop3目錄下,拷貝到/apps/eclipse/plugins的插件目錄下。進(jìn)入ubuntu圖形界面,雙擊eclipse圖標(biāo),啟動eclipse。5.在Eclipse窗口界面,依次點(diǎn)擊Window=>OpenPerspective=>Other。彈出一個(gè)窗口。選擇Map/Reduce,并點(diǎn)擊OK,可以看到窗口中,有三個(gè)變化。(左側(cè)項(xiàng)目瀏覽器、右上角操作布局切換、面板窗口)如果在windows下,則需要手動調(diào)出面板窗口Map/ReduceLocations面板,操作為,點(diǎn)擊window=>showview=>Other。在彈出的窗口中,選擇Map/ReduceLocations選項(xiàng),并點(diǎn)擊OK。這樣便可以調(diào)出視圖窗口Map/ReduceLocation。6.添加Hadoop配置,連接Hadoop集群。在這里添加Hadoop相關(guān)配置。Locationname,是為此配置起的一個(gè)名字。DFSMaster,是連接HDFS的主機(jī)名和端口號。點(diǎn)擊Finish保存配置。7.另外還需保證Hadoop中的HDFS相關(guān)進(jìn)程已經(jīng)啟動。在終端命令行輸入jps查看進(jìn)程狀態(tài)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyjps
若不存在hdfs相關(guān)的進(jìn)程,如Namenode、Datanode、secondarynamenode,則需要先切換到HADOOP_HOME下的sbin目錄,啟動hadoop。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/hadoop/sbin
./start-all.sh
8.展開左側(cè)項(xiàng)目瀏覽視圖,可以看到HDFS目錄結(jié)構(gòu)。9.上圖發(fā)現(xiàn)HDFS上,沒有存放任何目錄。那下面來創(chuàng)建一個(gè)目錄,檢測插件是否可用。右鍵myhadoop下的文件夾,在彈出的菜單中,點(diǎn)擊Createnewdirectory。輸入目錄名稱,點(diǎn)擊OK則創(chuàng)建目錄成功。右鍵文件夾,點(diǎn)擊Refresh,可用刷新HDFS目錄。到此Hadoop開發(fā)插件已經(jīng)安裝完畢!MapReduce代碼實(shí)現(xiàn)實(shí)驗(yàn)步驟:1.切換目錄到/apps/hadoop/sbin下,啟動hadoop。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/hadoop/sbin
./start-all.sh
2.在linux上,創(chuàng)建一個(gè)目錄/data/mapreduce1。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymkdir
-p
/data/mapreduce1
3.切換到/data/mapreduce1目錄下,使用wget命令從網(wǎng)址1:60000/allfiles/mapreduce1/buyer_favorite1,下載文本文件buyer_favorite1。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/mapreduce1
wget
1:60000/allfiles/mapreduce1/buyer_favorite1
依然在/data/mapreduce1目錄下,使用wget命令,從1:60000/allfiles/mapreduce1/hadoop2lib.tar.gz,下載項(xiàng)目用到的依賴包。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copywget
1:60000/allfiles/mapreduce1/hadoop2lib.tar.gz
將hadoop2lib.tar.gz解壓到當(dāng)前目錄下。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copytar
-xzvf
hadoop2lib.tar.gz
4.將linux本地/data/mapreduce1/buyer_favorite1,上傳到HDFS上的/mymapreduce1/in目錄下。若HDFS目錄不存在,需提前創(chuàng)建。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-mkdir
-p
/mymapreduce1/in
hadoop
fs
-put
/data/mapreduce1/buyer_favorite1
/mymapreduce1/in
5.打開Eclipse,新建JavaProject項(xiàng)目。并將項(xiàng)目名設(shè)置為mapreduce1。6.在項(xiàng)目名mapreduce1下,新建package包。并將包命名為mapreduce。7.在創(chuàng)建的包mapreduce下,新建類。并將類命名為WordCount。8.添加項(xiàng)目所需依賴的jar包,右鍵單擊項(xiàng)目名,新建一個(gè)目錄hadoop2lib,用于存放項(xiàng)目所需的jar包。將linux上/data/mapreduce1目錄下,hadoop2lib目錄中的jar包,全部拷貝到eclipse中,mapreduce1項(xiàng)目的hadoop2lib目錄下。選中hadoop2lib目錄下所有的jar包,單擊右鍵,選擇BuildPath=>AddtoBuildPath9.編寫Java代碼,并描述其設(shè)計(jì)思路。下圖描述了該mapreduce的執(zhí)行過程大致思路是將hdfs上的文本作為輸入,MapReduce通過InputFormat會將文本進(jìn)行切片處理,并將每行的首字母相對于文本文件的首地址的偏移量作為輸入鍵值對的key,文本內(nèi)容作為輸入鍵值對的value,經(jīng)過在map函數(shù)處理,輸出中間結(jié)果<word,1>的形式,并在reduce函數(shù)中完成對每個(gè)單詞的詞頻統(tǒng)計(jì)。整個(gè)程序代碼主要包括兩部分:Mapper部分和Reducer部分。Mapper代碼\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copypublic
static
class
doMapper
extends
Mapper<Object,
Text,
Text,
IntWritable>{
//第一個(gè)Object表示輸入key的類型;第二個(gè)Text表示輸入value的類型;第三個(gè)Text表示表示輸出鍵的類型;第四個(gè)IntWritable表示輸出值的類型
public
static
final
IntWritable
one
=
new
IntWritable(1);
public
static
Text
word
=
new
Text();
@Override
protected
void
map(Object
key,
Text
value,
Context
context)
throws
IOException,
InterruptedException
//拋出異常
{
StringTokenizer
tokenizer
=
new
StringTokenizer(value.toString(),"\t");
//StringTokenizer是Java工具包中的一個(gè)類,用于將字符串進(jìn)行拆分
word.set(tokenizer.nextToken());
//返回當(dāng)前位置到下一個(gè)分隔符之間的字符串
context.write(word,
one);
//將word存到容器中,記一個(gè)數(shù)
}
在map函數(shù)里有三個(gè)參數(shù),前面兩個(gè)Objectkey,Textvalue就是輸入的key和value,第三個(gè)參數(shù)Contextcontext是可以記錄輸入的key和value。例如context.write(word,one);此外context還會記錄map運(yùn)算的狀態(tài)。map階段采用Hadoop的默認(rèn)的作業(yè)輸入方式,把輸入的value用StringTokenizer()方法截取出的買家id字段設(shè)置為key,設(shè)置value為1,然后直接輸出<key,value>。Reducer代碼\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copypublic
static
class
doReducer
extends
Reducer<Text,
IntWritable,
Text,
IntWritable>{
//參數(shù)同Map一樣,依次表示是輸入鍵類型,輸入值類型,輸出鍵類型,輸出值類型
private
IntWritable
result
=
new
IntWritable();
@Override
protected
void
reduce(Text
key,
Iterable<IntWritable>
values,
Context
context)
throws
IOException,
InterruptedException
{
int
sum
=
0;
for
(IntWritable
value
:
values)
{
sum
+=
value.get();
}
//for循環(huán)遍歷,將得到的values值累加
result.set(sum);
context.write(key,
result);
}
}
map輸出的<key,value>先要經(jīng)過shuffle過程把相同key值的所有value聚集起來形成<key,values>后交給reduce端。reduce端接收到<key,values>之后,將輸入的key直接復(fù)制給輸出的key,用for循環(huán)遍歷values并求和,求和結(jié)果就是key值代表的單詞出現(xiàn)的總次,將其設(shè)置為value,直接輸出<key,value>。完整代碼\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copypackage
mapreduce;
import
java.io.IOException;
import
java.util.StringTokenizer;
import
org.apache.hadoop.fs.Path;
import
org.apache.hadoop.io.IntWritable;
import
org.apache.hadoop.io.Text;
import
org.apache.hadoop.mapreduce.Job;
import
org.apache.hadoop.mapreduce.Mapper;
import
org.apache.hadoop.mapreduce.Reducer;
import
org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public
class
WordCount
{
public
static
void
main(String[]
args)
throws
IOException,
ClassNotFoundException,
InterruptedException
{
Job
job
=
Job.getInstance();
job.setJobName("WordCount");
job.setJarByClass(WordCount.class);
job.setMapperClass(doMapper.class);
job.setReducerClass(doReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
Path
in
=
new
Path("hdfs://localhost:9000/mymapreduce1/in/buyer_favorite1");
Path
out
=
new
Path("hdfs://localhost:9000/mymapreduce1/out");
FileInputFormat.addInputPath(job,
in);
FileOutputFormat.setOutputPath(job,
out);
System.exit(job.waitForCompletion(true)
?
0
:
1);
}
public
static
class
doMapper
extends
Mapper<Object,
Text,
Text,
IntWritable>{
public
static
final
IntWritable
one
=
new
IntWritable(1);
public
static
Text
word
=
new
Text();
@Override
protected
void
map(Object
key,
Text
value,
Context
context)
throws
IOException,
InterruptedException
{
StringTokenizer
tokenizer
=
new
StringTokenizer(value.toString(),
"\t");
word.set(tokenizer.nextToken());
context.write(word,
one);
}
}
public
static
class
doReducer
extends
Reducer<Text,
IntWritable,
Text,
IntWritable>{
private
IntWritable
result
=
new
IntWritable();
@Override
protected
void
reduce(Text
key,
Iterable<IntWritable>
values,
Context
context)
throws
IOException,
InterruptedException
{
int
sum
=
0;
for
(IntWritable
value
:
values)
{
sum
+=
value.get();
}
result.set(sum);
context.write(key,
result);
}
}
}
10.在WordCount類文件中,單擊右鍵=>RunAs=>RunonHadoop選項(xiàng),將MapReduce任務(wù)提交到Hadoop中。11.待執(zhí)行完畢后,打開終端或使用hadoopeclipse插件,查看hdfs上,程序輸出的實(shí)驗(yàn)結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-ls
/mymapreduce1/out
hadoop
fs
-cat
/mymapreduce1/out/part-r-00000
4.Hive安裝部署實(shí)驗(yàn)步驟:1.首先在Linux本地,新建/data/hive1目錄,用于存放所需文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymkdir
-p
/data/hive1
切換目錄到/data/hive1下,使用wget命令,下載hive所需安裝包hive-1.1.0-cdh5.4.5.tar.gz以及mysql-connector-java-5.1.26-bin.jar。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/hive1
wget
1:60000/allfiles/hive1/hive-1.1.0-cdh5.4.5.tar.gz
wget
1:60000/allfiles/hive1/mysql-connector-java-5.1.26-bin.jar
2.將/data/hive1目錄下的hive-1.1.0-cdh5.4.5.tar.gz,解壓縮到/apps目錄下。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copytar
-xzvf
hive-1.1.0-cdh5.4.5.tar.gz
-C
/apps/
再切換到/apps目錄下,將/apps/hive-1.1.0-cdh5.4.5,重命名為hive。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps
mv
/apps/hive-1.1.0-cdh5.4.5/
/apps/hive
3.使用vim打開用戶環(huán)境變量。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
vim
~/.bashrc
將Hive的bin目錄,添加到用戶環(huán)境變量PATH中,然后保存退出。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy#hive
config
export
HIVE_HOME=/apps/hive
export
PATH=$HIVE_HOME/bin:$PATH
執(zhí)行source命令,使Hive環(huán)境變量生效。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysource
~/.bashrc
4.由于Hive需要將元數(shù)據(jù),存儲到Mysql中。所以需要拷貝/data/hive1目錄下的mysql-connector-java-5.1.26-bin.jar到hive的lib目錄下。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycp
/data/hive1/mysql-connector-java-5.1.26-bin.jar
/apps/hive/lib/
5.下面配置Hive,切換到/apps/hive/conf目錄下,并創(chuàng)建Hive的配置文件hive-site.xml。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/hive/conf
touch
hive-site.xml
使用vim打開hive-site.xml文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
hive-site.xml
并將下列配置項(xiàng),添加到hive-site.xml文件中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExsit=true;characterEncoding=latin1</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>strongs</value>
</property>
</configuration>
由于Hive的元數(shù)據(jù)會存儲在Mysql數(shù)據(jù)庫中,所以需要在Hive的配置文件中,指定mysql的相關(guān)信息。javax.jdo.option.ConnectionURL:數(shù)據(jù)庫鏈接字符串。javax.jdo.option.ConnectionDriverName:連接數(shù)據(jù)庫的驅(qū)動包。javax.jdo.option.ConnectionUserName:數(shù)據(jù)庫用戶名。javax.jdo.option.ConnectionPassword:連接數(shù)據(jù)庫的密碼。此處的數(shù)據(jù)庫的用戶名及密碼,需要設(shè)置為自身系統(tǒng)的數(shù)據(jù)庫用戶名及密碼。6.另外,還需要告訴Hive,Hadoop的環(huán)境配置。所以我們需要修改hive-env.sh文件。首先我們將hive-env.sh.template重命名為hive-env.sh。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymv
/apps/hive/conf/hive-env.sh.template
/apps/hive/conf/hive-env.sh
使用vim打開hive-env.sh文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
hive-env.sh
追加Hadoop的路徑,以及Hive配置文件的路徑到文件中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy#
Set
HADOOP_HOME
to
point
to
a
specific
hadoop
install
directory
#
HADOOP_HOME=${bin}/../../hadoop
HADOOP_HOME=/apps/hadoop
#
Hive
Configuration
Directory
can
be
controlled
by:
#
export
HIVE_CONF_DIR=
export
HIVE_CONF_DIR=/apps/hive/conf
7.下一步是配置Mysql,用于存儲Hive的元數(shù)據(jù)。首先,需要保證Mysql已經(jīng)啟動。執(zhí)行以下命令,查看Mysql的運(yùn)行狀態(tài)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
service
mysql
status
通過輸出,可以看出Mysql未啟動。所以需要執(zhí)行啟動命令。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
service
mysql
start
如果未安裝Mysql則需要執(zhí)行安裝命令。若我們的環(huán)境已安裝Mysql,則無需執(zhí)行此步。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
apt-get
install
mysql-server
8.開啟Mysql數(shù)據(jù)庫。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymysql
-u
root
-p
此時(shí)會提示輸入密碼,此處密碼為strongs創(chuàng)建名為hive的數(shù)據(jù)庫,編碼格式為latin1,用于存儲元數(shù)據(jù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
database
hive
CHARACTER
SET
latin1;
查看數(shù)據(jù)庫是否創(chuàng)建成功。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
databases;
下面,輸入exit退出Mysql。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyexit
9.執(zhí)行測試。由于Hive對數(shù)據(jù)的處理,依賴MapReduce計(jì)算模型,所以需要保證Hadoop相關(guān)進(jìn)程已經(jīng)啟動。輸入jps,查看進(jìn)程狀態(tài)。若Hadoop相關(guān)進(jìn)程未啟動,則需啟動Hadoop。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy/apps/hadoop/sbin/start-all.sh
啟動Hadoop后,在終端命令行界面,直接輸入hive便可啟動Hive命令行模式。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhive
輸入HQL語句查詢數(shù)據(jù)庫,測試Hive是否可以正常使用。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
databases;
至此Hive安裝完畢。5.Hive基本操作實(shí)驗(yàn)步驟:一、實(shí)驗(yàn)環(huán)境準(zhǔn)備1.首先在Linux本地新建/data/hive2目錄。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymkdir
-p
/data/hive2
2.切換到/data/hive2目錄下,使用wget命令,下載1:60000/allfiles/hive2中cat_group和goods文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/hive2
wget
1:60000/allfiles/hive2/cat_group
wget
1:60000/allfiles/hive2/goods
3.輸入jps檢查Hadoop相關(guān)進(jìn)程,是否已經(jīng)啟動。若未啟動,切換到/apps/hadoop/sbin目錄下,啟動Hadoop。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyjps
cd
/apps/hadoop/sbin
./start-all.sh
4.開啟Hive,首先,需要保證Mysql啟動。執(zhí)行以下命令,查看Mysql的運(yùn)行狀態(tài)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
service
mysql
status
輸出顯示Mysql未啟動。執(zhí)行以下啟動命令。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysudo
service
mysql
start
然后切換到/apps/hive/bin目錄下,開啟Hive。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/hive/bin
./hive
二、Hive數(shù)據(jù)倉庫的操作1.在Hive中創(chuàng)建一個(gè)數(shù)據(jù)倉庫,名為DB。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
database
DB;
2.以上簡單創(chuàng)建了一個(gè)DB庫,但是這條sql可以更進(jìn)一步的優(yōu)化,我們可以加上ifnotexists。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
database
if
not
exists
DB;
解析:在創(chuàng)建庫時(shí),應(yīng)避免新建的庫名與已有庫名重復(fù),如果庫名重復(fù)將會報(bào)出以下錯(cuò)誤(我在已有DB庫的前提下,再次創(chuàng)建了DB庫)。錯(cuò)誤提示數(shù)據(jù)倉庫DB已經(jīng)存在,那么加入的ifnotexists就起了作用,如下(在已有DB庫的前提下,再次創(chuàng)建DB庫,提示成功不會報(bào)錯(cuò))加入ifnotexists的意思是如果沒有DB庫就創(chuàng)建,如果已有就不再創(chuàng)建。3.查看數(shù)據(jù)倉庫DB的信息及路徑。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copydescribe
database
DB;
4.刪除名為DB的數(shù)據(jù)倉庫。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copydrop
database
if
exists
DB;
三、Hive數(shù)據(jù)表的操作Hive的數(shù)據(jù)表分為兩種:內(nèi)部表和外部表。Hive創(chuàng)建內(nèi)部表時(shí),會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變。在刪除表的時(shí)候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。這樣外部表相對來說更加安全些,數(shù)據(jù)組織也更加靈活,方便共享源數(shù)據(jù),生產(chǎn)中常使用外部表。下面詳細(xì)介紹對表操作的命令及使用方法:即將創(chuàng)建的表,表名不能和已有表名重復(fù),否則會報(bào)錯(cuò),現(xiàn)在我們showtables一下,查看已存在的表。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
tables;
現(xiàn)在庫中沒有表。1.創(chuàng)建一個(gè)名為cat的內(nèi)部表,有兩個(gè)字段為cat_id和cat_name,字符類型為string。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat(cat_id
string,cat_name
string);
查看是否創(chuàng)建成功。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
tables;
下面我們再次創(chuàng)建一個(gè)與剛才表名相同的表,看一下報(bào)錯(cuò)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat(cat_id
string,cat_name
string);
提示錯(cuò)誤,該表已經(jīng)存在!說明表與庫一樣,名稱不能重復(fù),解決方法是加入ifnotexists。2.創(chuàng)建一個(gè)外部表,表名為cat2,有兩個(gè)字段為cat_id和cat_name,字符類型為string。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
external
table
if
not
exists
cat2(cat_id
string,cat_name
string);
查看是否創(chuàng)建成功。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
tables;
外部表較內(nèi)部表而言,只是在create后加了一個(gè)external。3.修改cat表的表結(jié)構(gòu)。對cat表添加兩個(gè)字段group_id和cat_code。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyalter
table
cat
add
columns(group_id
string,cat_code
string);
使用desc命令查看一下加完字段后的cat表結(jié)構(gòu)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copydesc
cat;
4.修改cat2表的表名。把cat2表重命名為cat3。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyalter
table
cat2
rename
to
cat3;
這個(gè)命令可以讓用戶為表更名,數(shù)據(jù)所在的位置和分區(qū)名并不改變。5.刪除名為cat3的表并查看。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copydrop
table
cat3;
show
tables;
6.創(chuàng)建與已知表相同結(jié)構(gòu)的表,創(chuàng)建一個(gè)與cat表結(jié)構(gòu)相同的表,名為cat4,這里要用到like關(guān)鍵字。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat4
like
cat;
創(chuàng)建完成并查看結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
tables;
四、Hive中數(shù)據(jù)的導(dǎo)入導(dǎo)出以下介紹四種常見的數(shù)據(jù)導(dǎo)入方式:1.從本地文件系統(tǒng)中導(dǎo)入數(shù)據(jù)到Hive表。首先,在Hive中創(chuàng)建一個(gè)cat_group表,包含group_id和group_name兩個(gè)字段,字符類型為string,以“\t”為分隔符,并查看結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat_group(group_id
string,group_name
string)
row
format
delimited
fields
terminated
by
'\t'
stored
as
textfile;
show
tables;
[rowformatdelimited]關(guān)鍵字,是用來設(shè)置創(chuàng)建的表在加載數(shù)據(jù)的時(shí)候,支持的列分隔符。[storedastextfile]關(guān)鍵字,是用來設(shè)置加載數(shù)據(jù)的數(shù)據(jù)類型,默認(rèn)是TEXTFILE,如果文件數(shù)據(jù)是純文本,就是使用[storedastextfile],然后從本地直接拷貝到HDFS上,Hive直接可以識別數(shù)據(jù)。然后,將Linux本地/data/hive2目錄下的cat_group文件導(dǎo)入到Hive中的cat_group表中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyload
data
local
inpath
'/data/hive2/cat_group'
into
table
cat_group;
通過select語句查看cat_group表中是否成功導(dǎo)入數(shù)據(jù),由于數(shù)據(jù)量大,使用limit關(guān)鍵字限制輸出10條記錄。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
cat_group
limit
10;
導(dǎo)入成功。2.將HDFS上的數(shù)據(jù)導(dǎo)入到Hive中。首先,另外開啟一個(gè)操作窗口,在HDFS上創(chuàng)建/myhive2目錄。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-mkdir
/myhive2
然后,將本地/data/hive2/下的cat_group表上傳到HDFS的/myhive2上,并查看是否創(chuàng)建成功。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-put
/data/hive2/cat_group
/myhive2
hadoop
fs
-ls
/myhive2
接著,在Hive中創(chuàng)建名為cat_group1的表,創(chuàng)表語句如下。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat_group1(group_id
string,group_name
string)
row
format
delimited
fields
terminated
by
'\t'
stored
as
textfile;
最后,將HDFS下/myhive2中的表cat_group導(dǎo)入到Hive中的cat_group1表中,并查看結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyload
data
inpath
'/myhive2/cat_group'
into
table
cat_group1;
select
*
from
cat_group1
limit
10;
導(dǎo)入成功。提示:HDFS中數(shù)據(jù)導(dǎo)入到Hive中與本地?cái)?shù)據(jù)導(dǎo)入到hive中的區(qū)別是loaddata后少了local。3.從別的表中查詢出相應(yīng)的數(shù)據(jù)并導(dǎo)入到Hive中。首先在Hive中創(chuàng)建一個(gè)名為cat_group2的表。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat_group2(group_id
string,group_name
string)
row
format
delimited
fields
terminated
by
'\t'
stored
as
textfile;
用下面兩種方式將cat_group1表中的數(shù)據(jù)導(dǎo)入到cat_group2表中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
into
table
cat_group2
select
*
from
cat_group1;
或\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
overwrite
table
cat_group2
select
*
from
cat_group1;
(insertoverwrite會覆蓋數(shù)據(jù))。導(dǎo)入完成后,用select語句查詢cat_group2表。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
cat_group2
limit
10;
4.在創(chuàng)建表的時(shí)候從別的表中查詢出相應(yīng)數(shù)據(jù)并插入到所創(chuàng)建的表中。Hive中創(chuàng)建表cat_group3并直接從cat_group2中獲得數(shù)據(jù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat_group3
as
select
*
from
cat_group2;
創(chuàng)建并導(dǎo)入完成,用select語句查詢實(shí)驗(yàn)結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
cat_group3
limit
10;
五、三種常見的數(shù)據(jù)導(dǎo)出方式1.導(dǎo)出到本地文件系統(tǒng)。首先,在Linux本地新建/data/hive2/out目錄。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymkdir
-p
/data/hive2/out
并將Hive中的cat_group表導(dǎo)出到本地文件系統(tǒng)/data/hive2/out中。注意:方法和導(dǎo)入數(shù)據(jù)到Hive不一樣,不能用insertinto來將數(shù)據(jù)導(dǎo)出。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
overwrite
local
directory
'/data/hive2/out'
select
*
from
cat_group;
導(dǎo)出完成后,在Linux本地切換到/data/hive2/out目錄,通過cat命令查詢導(dǎo)出文件的內(nèi)容。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/hive2/out
ls
cat
000000_0
通過上圖可以看到導(dǎo)出的數(shù)據(jù),字段之間沒有分割開,所以我們使用下面的方式,將輸出字段以“\t”鍵分割。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
overwrite
local
directory
'/data/hive2/out'
select
group_id,concat('\t',group_name)
from
cat_group;
通過cat命令查詢/data/hive2/out目錄下的導(dǎo)出文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/hive2/out/
cat
000000_0
2.Hive中數(shù)據(jù)導(dǎo)出到HDFS中在HDFS上創(chuàng)建/myhive2/out目錄。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-mkdir
-p
/myhive2/out
并將Hive中的表cat_group中的數(shù)據(jù)導(dǎo)入到HDFS的/myhive2/out目錄里。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
overwrite
directory
'/myhive2/out'
select
group_id,concat('\t',group_name)
from
cat_group;
導(dǎo)入完成后,在HDFS上的/myhive2/out目錄下查看結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-ls
/myhive2/out
3.導(dǎo)出到Hive的另一個(gè)表中。將Hive中表cat_group中的數(shù)據(jù)導(dǎo)入到cat_group4中(兩表字段及字符類型相同)。首先在Hive中創(chuàng)建一個(gè)表cat_group4,有g(shù)roup_id和group_name兩個(gè)字段,字符類型為string,以‘\t’為分隔符。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
cat_group4(group_id
string,group_name
string)
row
format
delimited
fields
terminated
by
'\t'
stored
as
textfile;
然后將cat_group中的數(shù)據(jù)導(dǎo)入到cat_group4中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
into
table
cat_group4
select
*
from
cat_group;
導(dǎo)入完成后,查看cat_group4表中數(shù)據(jù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
cat_group4
limit
10;
六,Hive分區(qū)表的操作創(chuàng)建分區(qū)Hive中創(chuàng)建分區(qū)表沒有什么復(fù)雜的分區(qū)類型(范圍分區(qū)、列表分區(qū)、hash分區(qū),混合分區(qū)等)。分區(qū)列也不是表中的一個(gè)實(shí)際的字段,而是一個(gè)或者多個(gè)偽列。意思是說,在表的數(shù)據(jù)文件中實(shí)際并不保存分區(qū)列的信息與數(shù)據(jù)。1.創(chuàng)建表分區(qū),在Hive中創(chuàng)建一個(gè)分區(qū)表goods,包含goods_id和goods_status兩個(gè)字段,字符類型為string,分區(qū)為cat_id,字符類型為string,以“\t“為分隔符。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
goods(goods_id
string,goods_status
string)
partitioned
by
(cat_id
string)
row
format
delimited
fields
terminated
by
'\t';
查看表goods表結(jié)構(gòu)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copydesc
goods;
這樣一個(gè)分區(qū)表就建好了。2.向分區(qū)表插入數(shù)據(jù),將本地/data/hive2下的表goods中數(shù)據(jù),插入到分區(qū)表goods中。首先,在Hive中創(chuàng)建一個(gè)非分區(qū)表goods_1表,用于存儲本地/data/hive2下的表goods中數(shù)據(jù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
goods_1(goods_id
string,goods_status
string,cat_id
string)
row
format
delimited
fields
terminated
by
'\t';
將本地/data/hive2下的表goods中數(shù)據(jù)導(dǎo)入到Hive中的goods_1表中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyload
data
local
inpath
'/data/hive2/goods'
into
table
goods_1;
再將表goods_1中的數(shù)據(jù)導(dǎo)入到分區(qū)表goods中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyinsert
into
table
goods
partition(cat_id='52052')
select
goods_id,goods_status
from
goods_1
where
cat_id='52052';
插入數(shù)據(jù)完成后,用select語句查看實(shí)驗(yàn)結(jié)果。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
goods
limit
10;
4.查看表goods中的分區(qū)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyshow
partitions
goods;
5.修改表分區(qū),將分區(qū)表goods中的分區(qū)列cat_id=52052改為cat_id=52051,并查看修改后的分區(qū)名。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyalter
table
goods
partition(cat_id=52052)
rename
to
partition(cat_id=52051);
show
partitions
goods;
6.刪除表分區(qū)。在刪除goods分區(qū)表之前,先將goods表備份出一個(gè)goods_2表。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
goods_2(goods_id
string,goods_status
string)
partitioned
by
(cat_id
string)
row
format
delimited
fields
terminated
by
'\t';
insert
into
table
goods_2
partition(cat_id='52052')
select
goods_id,goods_status
from
goods_1
where
cat_id='52052';
刪除goods表中的cat_id分區(qū)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyalter
table
goods
drop
if
exists
partition
(cat_id='52051');
七,Hive桶的操作1.桶的定義及用途Hive還可以把表或分區(qū),組織成桶。將表或分區(qū)組織成桶有以下幾個(gè)目的:(1)是為使取樣更高效。在處理大規(guī)模的數(shù)據(jù)集時(shí),在開發(fā)、測試階段將所有的數(shù)據(jù)全部處理一遍可能不太現(xiàn)實(shí),如果能在數(shù)據(jù)集的一小部分?jǐn)?shù)據(jù)上試運(yùn)行查詢,會帶來很多方便。(2)是為了獲得更好的查詢處理效率。桶為表提供了額外的結(jié)構(gòu),Hive在處理某些查詢時(shí)利用這個(gè)結(jié)構(gòu),能夠有效地提高查詢效率。具體而言,連接兩個(gè)在(包含連接列的)相同列上劃分了桶的表,可以使用Map端連接(Map-sidejoin)高效的實(shí)現(xiàn)。比如JOIN操作。對于JOIN操作兩個(gè)表有一個(gè)相同的列,如果對這兩個(gè)表都進(jìn)行了桶操作。那么將保存相同列值的桶進(jìn)行JOIN操作就可以,可以大大較少JOIN的數(shù)據(jù)量。在建立桶之前,需要設(shè)置hive.enforce.bucketing屬性為true,使得Hive能識別桶。2.創(chuàng)建桶創(chuàng)建一個(gè)名為goods_t的表,包含兩個(gè)字段goods_id和goods_status,字符類型都為string,按cat_idstring做分區(qū),按goods_status列聚類和goods_id列排序,劃分成兩個(gè)桶\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycreate
table
goods_t(goods_id
string,goods_status
string)
partitioned
by
(cat_id
string)
clustered
by(goods_status)
sorted
by
(goods_id)
into
2
buckets;
設(shè)置環(huán)境變量sethive.enforce.bucketing=ture\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyset
hive.enforce.bucketing=true;
3.向goods_t表中插入goods_2表中的數(shù)據(jù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyfrom
goods_2
insert
overwrite
table
goods_t
partition(cat_id='52063')
select
goods_id,goods_status;
查看結(jié)果\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyselect
*
from
goods_t
tablesample(bucket
1
out
of
2
on
goods_id);
tablesample是抽樣語句,語法如下:tablesample(bucketxoutofy)y必須是table中BUCKET總數(shù)的倍數(shù)或者因子。實(shí)驗(yàn)截圖:5.25.36.SparkStandalone模式安裝實(shí)驗(yàn)步驟:1.Spark的運(yùn)行依賴jdk,Hadoop,Scala。在這里默認(rèn)已安裝jdk以及Hadoop偽分布模式。2.在Linux上,創(chuàng)建目錄/data/spark2,用于存儲spark安裝所需的文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymkdir
-p
/data/spark2
切換目錄到/data/spark2下,使用wget命令,下載所需的Spark的安裝包spark-1.6.0-bin-hadoop2.6.tgz及scala安裝包scala2.10.4.tgz。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/spark2/
wget
1:60000/allfiles/spark2/scala-2.10.4.tgz
wget
1:60000/allfiles/spark2/spark-1.6.0-bin-hadoop2.6.tgz
此處建議使用scala-2.10.4版本。官網(wǎng)中指出,若使用scala2.11.x,則需要重新編譯spark,并且編譯時(shí),需要指定scala版本的類型。關(guān)于spark版本,沒有嚴(yán)格要求。所以我們使用spark1.6版本。3.安裝Scala。切換目錄到/data/spark2下,將目錄下的scala-2.10.4.tgz解壓縮到/apps目錄下,并將解壓后的目錄名改為/apps/scala。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/spark2/
tar
-xzvf
/data/spark2/scala-2.10.4.tgz
-C
/apps/
cd
/apps
mv
/apps/scala-2.10.4/
/apps/scala
使用vim打開用戶環(huán)境變量~/.bashrc。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
~/.bashrc
將scala的bin目錄,追加的用戶環(huán)境變量中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy#scala
export
SCALA_HOME=/apps/scala
export
PATH=$SCALA_HOME/bin:$PATH
執(zhí)行source命令,使系統(tǒng)環(huán)境變量生效。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysource
~/.bashrc
4.切換目錄到/data/spark2下,將Spark的安裝包spark-1.6.0-bin-hadoop2.6.tgz,解壓縮到/apps目錄下,并將解壓后的目錄名,重命名為spark。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/data/spark2
tar
-xzvf
/data/spark2/spark-1.6.0-bin-hadoop2.6.tgz
-C
/apps/
cd
/apps/
mv
/apps/spark-1.6.0-bin-hadoop2.6/
/apps/spark
使用vim打開用戶環(huán)境變量~/.bashrc。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
~/.bashrc
將spark的bin目錄,追加到用戶環(huán)境變量中。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy#spark
export
SPARK_HOME=/apps/spark
export
PATH=$SPARK_HOME/bin:$PATH
執(zhí)行source命令,使用戶環(huán)境變量生效。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copysource
~/.bashrc
5.切換目錄到/apps/spark/conf下,將conf目錄下的配置文件slaves.template重命名為slaves。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/spark/conf
mv
slaves.template
slaves
在slaves中,存儲了所有worker節(jié)點(diǎn)的的ip或主機(jī)名。使用文本編輯器vim打開slaves文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
slaves
將所有worker節(jié)點(diǎn)的ip添加進(jìn)去。由于目前只有一臺節(jié)點(diǎn),所以是。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copy
6.將/apps/spark/conf/spark-env.sh.template文件,重命名為/apps/spark/conf/spark-env.sh。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymv
/apps/spark/conf/spark-env.sh.template
/apps/spark/conf/spark-env.sh
使用vim,打開/apps/spark/conf/spark-env.sh文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
/apps/spark/conf/spark-env.sh
添加如下配置:\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyHADOOP_CONF_DIR=/apps/hadoop/etc/hadoop
JAVA_HOME=/apps/java
SPARK_MASTER_IP=
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081
SPARK_EXECUTOR_INSTANCES=1
此處需要配置JAVA_HOME以及HADOOP配置文件所在的目錄HADOOP_CONF_DIR。SPARK_MASTER_IP、SPARK_MASTER_PORT、SPARK_MASTER_WEBUI_PORT,分別指spark集群中,master節(jié)點(diǎn)的ip地址、端口號、提供的web接口的端口。SPARK_WORKER_CORES、SPARK_WORKER_MEMORY:worker節(jié)點(diǎn)的內(nèi)核數(shù)、內(nèi)存大小。此處可用根據(jù)自己機(jī)器情況調(diào)整配置項(xiàng)參數(shù)。7.啟動Hadoop,首先需要保證Hadoop相關(guān)進(jìn)程為啟動狀態(tài)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/hadoop/sbin
./start-all.sh
切換目錄到/apps/spark/sbin目錄下,啟動Spark。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/spark/sbin
./start-all.sh
執(zhí)行jps,查看進(jìn)程變化。8.執(zhí)行測試在HDFS上,創(chuàng)建/myspark2目錄,并將Linux上/apps/spark/README.md文件,上傳到HDFS。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyhadoop
fs
-mkdir
/myspark2
hadoop
fs
-put
/apps/spark/README.md
/myspark2/
切換目錄到/apps/spark/bin目錄下,使用SparkShell客戶端,訪問服務(wù)端,驗(yàn)證安裝完的Spark是否可用,進(jìn)入命令行模式。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/spark/bin
./spark-shell
--master
spark://localhost:7077
在SparkShell中,使用scala加載HDFS上的README.md文件,并轉(zhuǎn)變?yōu)閞dd。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvar
mytxt
=
sc.textFile("hdfs://localhost:9000/myspark2/README.md");
統(tǒng)計(jì)文件的行數(shù)。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copymytxt.count();
可用看到輸出為:\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyres3:
Long
=
95
表明安裝正確。9.在剛才執(zhí)行統(tǒng)計(jì)過程中,由于Log4j的日志輸出級別為info級別,所以會在屏幕上輸出很多的log,很難定位程序的輸出結(jié)果。輸入exit,退出spark-shell,并切換目錄到/apps/spark/sbin目錄下,停止Spark。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyexit
cd
/apps/spark/sbin
./stop-all.sh
再切換目錄到/apps/spark/conf目錄下,將目錄下perties.template重命名為perties。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copycd
/apps/spark/conf
mv
/apps/spark/conf/perties.template
/apps/spark/conf/perties
使用vim打開perties文件。\o"viewplain"viewplain
\o"將代碼復(fù)制到實(shí)驗(yàn)機(jī)"copyvim
perties
更改log4j的日志級別為WARN級別,修改log4j.rootCategor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店改造合同范例范例
- 戶外汽燈租賃合同范例
- 鋪位 租賃合同范例
- 快遞員合作合同范例
- 家具買賣貸款合同范例
- 市政材料供應(yīng)合同范例
- 含司機(jī)租車合同范例
- 鞋面批發(fā)采購合同范例
- 藥品合同范例格式
- 裝修固定總價(jià)合同范例
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(提高篇)(含答案)
- 2025年安全生產(chǎn)目標(biāo)實(shí)施計(jì)劃
- 福建百校2025屆高三12月聯(lián)考?xì)v史試卷(含答案解析)
- 2024年山西省建筑安全員《B證》考試題庫及答案
- 2023年益陽市安化縣招聘鄉(xiāng)鎮(zhèn)衛(wèi)生院護(hù)理人員筆試真題
- 《基于PLC的智能交通燈控制系統(tǒng)設(shè)計(jì)》10000字(論文)
- 首都經(jīng)濟(jì)貿(mào)易大學(xué)《微積分》2021-2022學(xué)年第一學(xué)期期末試卷
- 人音版音樂七年級上冊《父親的草原母親的河》課件
- 2024年度短視頻內(nèi)容創(chuàng)作服務(wù)合同3篇
- 介入治療并發(fā)癥
- 鑄牢中華民族共同體意識-形考任務(wù)1-國開(NMG)-參考資料
評論
0/150
提交評論