pyspark相關配置

hadoop(配置文件都在$HADOOP_HOME/etc/hadoop)

  1. hadoop.env.sh
    #export JAVA_HOME=${JAVA_HOME}
    export JAVA_HOME=/opt/modules/jdk1.8.0_11
    
    #配置java_home
  2. core-site.xml
    <configuration>
    	<property>
    		<name>fs.default.name</name>
    		<value>hdfs://pyspark-1.bigload.com:8020</value>
    	</property>
    </configuration>

     

  3. hdfs-site.xml
    <configuration>
    	<property>
    		<name>dfs.namenode.name.dir</name>
    		<value>/opt/modules/hadoop-2.6.0-cdh5.7.0/tmp/dfs/name</value>
    	</property>
    	<property>
    		<name>dfs.datanode.data.dir</name>
    		<value>/opt/modules/hadoop-2.6.0-cdh5.7.0/tmp/dfs/data</value>
    	</property>
    	
    	<!--副本數-->
    	<property>
    		<name>dfs.replication</name>
    		<value>1</value>
    	</property>
    </configuration>

     

  4. mapred-site.xml(cp mapred-site.xml.template mapred-site.xml)
    <configuration>
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    </configuration>

     

  5. yarn-site.xml
    <configuration>
    	<property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    </configuration>
    

     

  6. 格式化
    bin/hadoop namenode –format
    

     

  7. 無祕鑰登錄
    ssh無祕鑰登錄
    cd ~/.ssh
    主節點 NameNode
    1)生成一對公鑰與祕鑰
    ssh-keygen -t  rsa
    2)拷貝公鑰到各個機器上
    ssh-copy-id   pyspark-1.bigload.com 
    ssh-copy-id localhost
    ssh-copy-id 0.0.0.0
    
    

     

  8. 啓動hdfs
    sbin/start-dfs.sh

     

  9. 遊覽器查看(http://pyspark-1.bigload.com:50070),傳個文件
    bin/hadoop dfs -mkdir -p /test
    bin/hadoop fs -put README.txt /test

     

  10. 啓動yarn
    sbin/start-yarn.sh
  11. 遊覽器查看(http://pyspark-1.bigload.com:8088/

maven

  1. 解壓
    tar -zxf apache-maven-3.3.9-bin.tar.gz -C /opt/modules/

     

  2. 建立local/repo文件夾,並且修改config/settings.xml
    創建local/repo文件夾
    
        mkdir -p local/repo
    
    
    settings.xml
    
        <localRepository>/opt/modules/apache-maven-3.3.9/local/repo</localRepository>
    
    
        並添加鏡像:
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

python

yum源(阿里雲)http://www.cnblogs.com/lin1/p/5607121.html

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc

tar -zxf Python-3.6.9.tgz
cd Python-3.6.9
./configure --prefix=/opt/modules/python3/
cd /opt/modules/python3
make && make install

 

spark

解壓

修改爲對應的版本(dev/make-distribution.sh)
初始
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
| grep -v "INFO"\
| tail -n 1)
SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
| grep -v "INFO"\
| tail -n 1)
SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
| grep -v "INFO"\
| fgrep --count "<id>hive</id>";\
# Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
# because we use "set -o pipefail"
echo -n)
替換爲下面對應的參數值
VERSION=2.4.4
SCALA_VERSION=2.11.12
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
SPARK_HIVE=1

e.spark pom.xml 添加 cdh reponsitory
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>

如果不添加會出現如下錯誤信息:
Failed to execute goal on project spark-launcher_2.11: Could not resolve dependencies for project org.apache.spark:spark-launcher_2.11:jar:2.1.0: Could not find artifact org.apache.hadoop:hadoop-client:jar:2.5.0-cdh5.3.6

[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :spark-launcher_2.11
-rf :spark-launcher_2.11

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.7.0

編譯時間會有些長,會生成一個spark-2.4.4-bin-2.6.0-cdh5.7.0.tgz
tar -zxf spark-2.4.4-bin-2.6.0-cdh5.7.0.tgz -C /opt/modules
隨後進入編譯後的文件夾
cd /opt/modules/spark-2.4.4-bin-2.6.0-cdh5.7.0
可以用bin/spark-shell測試一下

配置SPARK默認使用 PYTHON3
在 bin/pyspark 文件中添加 export PYSPARK_PYTHON=python3
(這裏最好也把PYSPARK_PYTHON加入環境變量,省的之後出錯,我就是之後用pyspark運行腳本的時候報錯了,才發現,python/pyspark/裏還需要改pyspark_python的,所以加入環境變量沒毛病)

http://www.bubuko.com/infodetail-2294107.html

官網:http://spark.apache.org/

源碼:https://github.com/apache/spark

spark core核心rdd

什麼是rdd,彈性分佈式數據集(Resilient Distributed Dataset )

1)rdd是一個抽象類

2)帶泛型的,可以支持多種類型:String,User,Person

rdd特性

    不可變

   分區

   並行計算的

1.A list of partitions

RDD是一個由多個partition(某個節點裏的某一片連續的數據)組成的的list;將數據加載爲RDD時,一般會遵循數據的本地性(一般一個hdfs裏的block會加載爲一個partition)。

2.A function for computing each split

一個函數計算每一個分片,RDD的每個partition上面都會有function,也就是函數應用,其作用是實現RDD之間partition的轉換。

3.A list of dependencies on other RDDs

RDD會記錄它的依賴 ,依賴還具體分爲寬依賴和窄依賴,但並不是所有的RDD都有依賴。爲了容錯(重算,cache,checkpoint),也就是說在內存中的RDD操作時出錯或丟失會進行重算

rdd1==>rdd2==>rdd3==>rdd4

rdd2=f1(rdd1)

rdd3=f2(rdd2)

rdd4=f3(rdd3)

 

4.Optionally,a Partitioner for Key-value RDDs

  可選項,如果RDD裏面存的數據是key-value形式,則可以傳遞一個自定義的Partitioner進行重新分區,例如這裏自定義的Partitioner是基於key進行分區,那則會將不同RDD裏面的相同key的數據放到同一個partition裏面

5.Optionally, a list of preferred locations to compute each split on

最優的位置去計算,也就是數據的本地性。(數據在哪優先吧作業調度到數據所在的節點進行計算:移動數據不如移動計算)

圖解rdd

sparkcontext & sparkconf

Spark程序必須做的第一件事是創建一個SparkContext對象,該對象告訴Spark如何訪問集羣。要創建一個,SparkContext您首先需要構建一個SparkConf對象,其中包含有關您的應用程序的信息。

conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)

appName參數是您的應用程序顯示在集羣UI上的名稱。 masterSpark,Mesos或YARN羣集URL或特殊的“本地”字符串,以本地模式運行。實際上,當在集羣上運行時,您將不希望master在程序中進行硬編碼,而是在其中啓動應用程序spark-submit並在其中接收。但是,對於本地測試和單元測試,您可以傳遞“ local”以在內部運行Spark。

rdd創建方式

1.並行集合

>>> data=[1,2,3,4,5]
>>> distData=sc.parallelize(data)
>>> distData
ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:195
>>> data
[1, 2, 3, 4, 5]
>>> disData.collect()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'disData' is not defined
>>> distData.collect()
[1, 2, 3, 4, 5]
>>> distData.reduce(lambda a,b:a+b)
15                                       

2.外部數據集

 

PySpark可以從Hadoop支持的任何存儲源創建分佈式數據集,包括您的本地文件系統,HDFS,Cassandra,HBase,Amazon S3等。Spark支持文本文件,SequenceFiles和任何其他Hadoop InputFormat

可以使用SparkContexttextFile方法創建文本文件RDD 。此方法需要一個URI的文件(本地路徑的機器上,或一個hdfs://s3a://等URI),並讀取其作爲行的集合。這是一個示例調用:

>>> distFile = sc.textFile("data.txt")

一旦創建,distFile就可以通過數據集操作對其進行操作。例如,我們可以使用mapreduce操作將所有行的大小相加,如下所示:distFile.map(lambda s: len(s)).reduce(lambda a, b: a + b)

關於使用Spark讀取文件的一些注意事項:

  • 如果在本地文件系統上使用路徑,則還必須在工作節點上的相同路徑上訪問該文件。將文件複製到所有工作服務器,或者使用網絡安裝的共享文件系統。

  • Spark的所有基於文件的輸入方法(包括textFile)都支持在目錄,壓縮文件和通配符上運行。例如,你可以使用textFile("/my/directory")textFile("/my/directory/*.txt")textFile("/my/directory/*.gz")

  • textFile方法還採用可選的第二個參數來控制文件的分區數。默認情況下,Spark爲文件的每個塊創建一個分區(HDFS中的塊默認爲128MB),但是您也可以通過傳遞更大的值來請求更大數量的分區。請注意,分區不能少於塊。

除文本文件外,Spark的Python API還支持其他幾種數據格式:

  • SparkContext.wholeTextFiles使您可以讀取包含多個小文本文件的目錄,並將每個小文本文件作爲(文件名,內容)對返回。與相比textFile,會在每個文件的每一行返回一條記錄。

  • RDD.saveAsPickleFileSparkContext.pickleFile支持以包含醃製Python對象的簡單格式保存RDD。批處理用於鹹菜序列化,默認批處理大小爲10。

  • SequenceFile和Hadoop輸入/輸出格式

請注意,此功能當前已標記Experimental,僅供高級用戶使用。將來可能會替換爲基於Spark SQL的讀/寫支持,在這種情況下,Spark SQL是首選方法。

sc.textFile("file:///opt/datas/README.md").collect()
sc.textFile("hdfs://pyspark-1.bigload.com/hadoop/README.md").collect()

spark應用程序開發及運行

我是把一切環境都是裝載了虛擬機上,發現在Windows還需要再做一次環境絕望之餘看見了能遠程連接,換上自己的虛擬機的ip就行了,反正是怎麼省事怎麼來,日後要是出現問題了再改吧,感謝分享

Windows上的PyCharm 遠程連接調試pyspark


from pyspark import SparkConf,SparkContext
#創建sparkconf:設置的是spark相關的參數信息
conf=SparkConf().setMaster("local[2]").setAppName("spark0301")
#創建sparkcontext
sc=SparkContext(conf=conf)

#業務邏輯
data=[1,3,44,5]
distData=sc.parallelize(data)
print(distData.collect())

sc.stop()

後來發現map的時候出錯了,報了一些name ‘memoryview’ is not defined,看日誌中間還用到了python2.6的一些函數,我明明指定了要python3啊,後來發現還需要配一個PYSPARK_PYTHON

在我係統中python正好指向的是python2.6,所以將pyspark_python添加的環境變量

vi ~/.bash_profile

添加
export PYSPARK_PYTHON=/opt/modules/python3/bin/python3

保存退出


source ~/.bash_profile

Hive安裝

1.解壓安裝 http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

2.修改conf目錄下的hive-env.sh.template文件名稱

    $ mv hive-env.sh.template hive-env.sh

3.配置hive-env.sh文件中的HADOOP_HOME

4.配置hive-env.sh文件中的HIVE_CONF_DIR

5.啓動HDFS服務

6.HDFS上創建Hive的目錄

    $ bin/hdfs dfs -mkdir -p /user/hive/warehouse

    $ bin/hdfs dfs -chmod g+w /user/hive/warehouse

啓動hive服務

    $ bin/hive

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章