大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)報(bào)告_第1頁
大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)報(bào)告_第2頁
大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)報(bào)告_第3頁
大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)報(bào)告_第4頁
大數(shù)據(jù)技術(shù)實(shí)踐實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論