2016-05-01 14 views
0

Cloudera仮想マシンに付属のSparkチュートリアルを実行しようとしています。しかし、私は正しい行末エンコーディングを使用していますが、私は大量のエラーが発生するため、スクリプトを実行できません。 チュートリアルはCoursera Introduction to Big Data Analyticsコースの一部です。割り当てcan be found hereCloudera VMでチュートリアルCSVファイルを読むときの例外

これは私がしたことです。 (まだ行われていない場合)IPythonシェルをインストールします

sudo easy_install ipython==1.2.1 

オープン/(どちらか1.2.0または1.4.0で)シェルを起動します。

窓スタイルに行末を設定
PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10:1.2.0 

。これは、ファイルがWindowsエンコーディングされているため、そのようにするためにコースに記載されているためです。これをしないと、他のエラーが発生します。

CSVファイルをロードしようと
sc._jsc.hadoopConfiguration().set('textinputformat.record.delimiter','\r\n') 

yelp_df = sqlCtx.load(source='com.databricks.spark.csv',header = 'true',inferSchema = 'true',path = 'file:///usr/lib/hue/apps/search/examples/collections/solr_configs_yelp_demo/index_data.csv') 

しかし、このように起動し、エラーの非常に長いリスト、取得:

Py4JJavaError: An error occurred while calling o23.load.: java.lang.RuntimeException: 
Unable to instantiate 
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at 
org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:472) 

完全なエラーメッセージcan be seen hereを。これは/etc/hive/conf/hive-site.xmlです。

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<configuration> 

    <!-- Hive Configuration can either be stored in this file or in the hadoop configuration files --> 
    <!-- that are implied by Hadoop setup variables.            --> 
    <!-- Aside from Hadoop setup variables - this file is provided as a convenience so that Hive --> 
    <!-- users do not have to edit hadoop configuration files (that may be managed as a centralized --> 
    <!-- resource).                     --> 

    <!-- Hive Execution Parameters --> 

    <property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true</value> 
    <description>JDBC connect string for a JDBC metastore</description> 
    </property> 

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

    <property> 
    <name>javax.jdo.option.ConnectionUserName</name> 
    <value>hive</value> 
    </property> 

    <property> 
    <name>javax.jdo.option.ConnectionPassword</name> 
    <value>cloudera</value> 
    </property> 

    <property> 
    <name>hive.hwi.war.file</name> 
    <value>/usr/lib/hive/lib/hive-hwi-0.8.1-cdh4.0.0.jar</value> 
    <description>This is the WAR file with the jsp content for Hive Web Interface</description> 
    </property> 

    <property> 
    <name>datanucleus.fixedDatastore</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>datanucleus.autoCreateSchema</name> 
    <value>false</value> 
    </property> 

    <property> 
    <name>hive.metastore.uris</name> 
    <value>thrift://127.0.0.1:9083</value> 
    <description>IP address (or fully-qualified domain name) and port of the metastore host</description> 
    </property> 
</configuration> 

どのように解決するには?私はそれがかなり一般的なエラーだと思います。しかし、私はまだ解決策を見つけることができませんでした。

もう1つ:このような長いエラーメッセージを別のログファイルにダンプする方法はありますか?

+0

あなたはUNIX環境で作業しているようですが、どうしてラインエンドをWindowsスタイルに設定していますか?このコマンドを発行せずにもう一度お試しいただけますか?また、あなたが得るエラーの最後の部分を追加してください? – Yaron

+0

あなたはどのバージョンのCloudera VMを使用していますか? – Yaron

+0

ファイルはWindowsエンコーディングのため、チュートリアルではそうです。 btw:Cloudera QuickStart VMはCDH 5.7 – Matthias

答えて

0

2つの問題があるようです。まず、ハイブ・メタストアは時にはオフラインになっていました。次に、スキーマを推論することはできません。したがって、私はスキーマを手動で作成し、CSVファイルをロードするときにそれを引数として追加しました。とにかく、私はこれが何とかschemaInfer = trueで動作するかどうかを理解したいと思います。

ここに手動で定義されたスキーマを使用した私のバージョンです。だから、必ずハイブが開始されますその後

sudo service hive-metastore restart 

、それは構造だ理解するために、CSVファイルの最初の部分に顔をしています。私はこのコマンドラインを使用しました:

head /usr/lib/hue/apps/search/examples/collections/solr_configs_yelp_demo/index_data.csv 

ここで、pythonシェルを開きます。それを行う方法については、元の投稿を参照してください。次に、スキーマを定義します。

from pyspark.sql.types import * 
schema = StructType([ 
    StructField("business_id", StringType(), True), 
    StructField("cool", IntegerType(), True), 
    StructField("date", StringType(), True), 
    StructField("funny", IntegerType(), True), 
    StructField("id", StringType(), True), 
    StructField("stars", IntegerType(), True), 
    StructField("text", StringType(), True), 
    StructField("type", StringType(), True), 
    StructField("useful", IntegerType(), True), 
    StructField("user_id", StringType(), True), 
    StructField("name", StringType(), True), 
    StructField("full_address", StringType(), True), 
    StructField("latitude", DoubleType(), True), 
    StructField("longitude", DoubleType(), True), 
    StructField("neighborhood", StringType(), True), 
    StructField("open", StringType(), True), 
    StructField("review_count", IntegerType(), True), 
    StructField("state", StringType(), True)]) 

次に、スキーマを指定してCSVファイルをロードします。 Windowsの改行コードを設定する必要がないことに注意してください:

yelp_df = sqlCtx.load(source='com.databricks.spark.csv', 
header = 'true', 
schema = schema, 
path = 'file:///usr/lib/hue/apps/search/examples/collections/solr_configs_yelp_demo/index_data.csv') 

データセット上で実行する任意の方法によって結果。私は完全に働いたカウントを取得しようとしました。

yelp_df.count() 

@yaronのおかげで、inferSchemaでCSVを読み込む方法がわかりました。まず、あなたは正しくセットアップハイブ-メタストアをする必要があります。

sudo cp /etc/hive/conf.dist/hive-site.xml /usr/lib/spark/conf/ 

次に、Pythonシェルを起動し、Windowsのエンコードに改行コードを変更しないでください。それを変更することは永続的です(セッション不変)。だから、前にWindowsスタイルに変更した場合は、それを '\ n'にリセットする必要があります。 inferSchemaをtrueに設定して次にCSVファイルを読み込む:議論の

yelp_df = sqlCtx.load(source='com.databricks.spark.csv', 
header = 'true', 
inferSchema = 'true', 
path = 'file:///usr/lib/hue/apps/search/examples/collections/solr_configs_yelp_demo/index_data.csv') 
+1

https://www.coursera.org/learn/bigdata-analytics/supplement/tyH3p/setup-pyspark-for-dataframes の指示に従って、次のコマンドを実行しましたか:sudo cp/etc/hive/conf .dist/hive-site.xml/usr/lib/spark/conf /? – Yaron

+0

いいえ、それを見たことはありません。彼らはそれを割り当てに直接入れるべきでした。私はそれをチェックし、あなたに知らせるでしょう。 – Matthias

+0

@ Yaron:ヒントのおかげで。出来た! unixの行の終わりを保つだけです。 – Matthias

関連する問題