Macでdocker image sequenceiq/spark を使用してこれらを調査します spark examples 、調査プロセス中に、そのイメージ内のsparkを1.6.1にアップグレードします この答え に従い、_Simple Data Operations
_の例を開始するとエラーが発生しました、ここで何が起こったのですか:
df = sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load()
を実行するとエラーが発生し、pysparkコンソールの完全なスタックは次のようになります。
_Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
16/04/12 22:45:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 1.6.1
/_/
Using Python version 2.6.6 (r266:84292, Jul 23 2015 15:22:56)
SparkContext available as sc, HiveContext available as sqlContext.
>>> url = "jdbc:mysql://localhost:3306/test?user=root;password=myPassWord"
>>> df = sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load()
16/04/12 22:46:05 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
16/04/12 22:46:06 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
16/04/12 22:46:11 WARN ObjectStore: Version information not found in metastore. Hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
16/04/12 22:46:11 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
16/04/12 22:46:16 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
16/04/12 22:46:17 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/spark/python/pyspark/sql/readwriter.py", line 139, in load
return self._df(self._jreader.load())
File "/usr/local/spark/python/lib/py4j-0.9-src.Zip/py4j/Java_gateway.py", line 813, in __call__
File "/usr/local/spark/python/pyspark/sql/utils.py", line 45, in deco
return f(*a, **kw)
File "/usr/local/spark/python/lib/py4j-0.9-src.Zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o23.load.
: Java.sql.SQLException: No suitable driver
at Java.sql.DriverManager.getDriver(DriverManager.Java:278)
at org.Apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:50)
at org.Apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:50)
at scala.Option.getOrElse(Option.scala:120)
at org.Apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:49)
at org.Apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:120)
at org.Apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:91)
at org.Apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:57)
at org.Apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:158)
at org.Apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:119)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.Java:231)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.Java:381)
at py4j.Gateway.invoke(Gateway.Java:259)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.Java:133)
at py4j.commands.CallCommand.execute(CallCommand.Java:79)
at py4j.GatewayConnection.run(GatewayConnection.Java:209)
at Java.lang.Thread.run(Thread.Java:744)
>>>
_
ここに私が今まで試したものがあります:
_mysql-connector-Java-5.0.8-bin.jar
_をダウンロードし、_/usr/local/spark/lib/
_に入れます。それでも同じエラーです。
次のように_t.py
_を作成します。
_from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext(appName="PythonSQL")
sqlContext = SQLContext(sc)
df = sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load()
df.printSchema()
countsByAge = df.groupBy("age").count()
countsByAge.show()
countsByAge.write.format("json").save("file:///usr/local/mysql/mysql-connector-Java-5.0.8/db.json")
_
次に、_spark-submit --conf spark.executor.extraClassPath=mysql-connector-Java-5.0.8-bin.jar --driver-class-path mysql-connector-Java-5.0.8-bin.jar --jars mysql-connector-Java-5.0.8-bin.jar --master local[4] t.py
_を試しました。結果は同じままです。
pyspark --conf spark.executor.extraClassPath=mysql-connector-Java-5.0.8-bin.jar --driver-class-path mysql-connector-Java-5.0.8-bin.jar --jars mysql-connector-Java-5.0.8-bin.jar --master local[4] t.py
_の有無にかかわらず、_t.py
_を試しましたが、それでも同じです。このすべての間に、mysqlが実行されています。そして、ここに私のOS情報があります:
_# rpm --query centos-release
centos-release-6-5.el6.centos.11.2.x86_64
_
また、hadoopバージョンは2.6です。
今、私は次にどこに行くかわからないので、誰かがアドバイスをするのを手伝ってくれることを願っています、ありがとう!
スクリプトをMySQLに書き込もうとしたときに、「Java.sql.SQLException:No適切なドライバー」に遭遇しました。
これが私がそれを修正するためにしたことです。
Script.pyで
df.write.jdbc(url="jdbc:mysql://localhost:3333/my_database"
"?user=my_user&password=my_password",
table="my_table",
mode="append",
properties={"driver": 'com.mysql.jdbc.Driver'})
その後、この方法でスパーク送信を実行しました
SPARK_HOME=/usr/local/Cellar/Apache-spark/1.6.1/libexec spark-submit --packages mysql:mysql-connector-Java:5.1.39 ./script.py
SPARK_HOMEは、sparkがインストールされている場所に固有です。ご使用の環境では、この https://github.com/sequenceiq/docker-spark/blob/master/README.md 役立つかもしれません。
上記のすべてが混乱している場合は、これを試してください:
t.pyで置換
sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load()
と
sqlContext.read.format("jdbc").option("dbtable","people").option("driver", 'com.mysql.jdbc.Driver').load()
そしてそれを実行します
spark-submit --packages mysql:mysql-connector-Java:5.1.39 --master local[4] t.py