Comments (5)
@Lobo2008 I suggest to use release-0.1.0, it will be more stable.
for current problem, please check coordinator's log first to confirm assignment request is accepted.
Then check if shuffle server is registered to coordinator.
from firestorm.
Hi,I re-deploy using release-0.1.0 with one coordinator(nodeA) and two shuffle servers(nodeB nodeC),
but when i submit an application with spark client on nodeA, it throws
ERROR YarnScheduler: Lost executor 1 on r5.XXX.net: Unable to create executor due to Unable to register with external shuffle server due to : java.lang.UnsupportedOperationException: Unsupported shuffle manager of executor:
r5.XXX.net is one of my namenodes on yarn
nodeA nodeB node C are not namenode
my whole deployments for RSS are just some operations referring to READDME.
So does the Exeption mean that i need to do something with namenodes?
if so,what should i still need to do.
THANK YOU!
detailed exception:
21/12/21 18:08:51 INFO SparkContext: Starting job: collect at JavaWordCount.java:53
21/12/21 18:08:51 INFO RssShuffleManager: Generate application id used in rss: application_1637568296779_644452_1640081331328
21/12/21 18:08:51 INFO ShuffleWriteClientImpl: Success to get shuffle server assignment from Coordinator grpc client ref to XXX.197:19999
21/12/21 18:08:51 INFO RssShuffleManager: Start to register shuffleId[0]
21/12/21 18:08:51 INFO RssShuffleManager: Finish register shuffleId[0] with 187 ms
21/12/21 18:08:51 INFO RssShuffleManager: RegisterShuffle with ShuffleId[0], partitionNum[1]
21/12/21 18:08:52 INFO DAGScheduler: Registering RDD 6 (mapToPair at JavaWordCount.java:49) as input to shuffle 0
21/12/21 18:08:52 INFO DAGScheduler: Got job 0 (collect at JavaWordCount.java:53) with 1 output partitions
21/12/21 18:08:52 INFO DAGScheduler: Final stage: ResultStage 1 (collect at JavaWordCount.java:53)
21/12/21 18:08:52 INFO DAGScheduler: Parents of final stage: List(ShuffleMapStage 0)
21/12/21 18:08:52 INFO DAGScheduler: Missing parents: List(ShuffleMapStage 0)
21/12/21 18:08:52 INFO DAGScheduler: Submitting ShuffleMapStage 0 (MapPartitionsRDD[6] at mapToPair at JavaWordCount.java:49), which has no missing parents
21/12/21 18:08:52 INFO MemoryStore: Block broadcast_1 stored as values in memory (estimated size 19.8 KB, free 1601.1 MB)
21/12/21 18:08:52 INFO MemoryStore: Block broadcast_1_piece0 stored as bytes in memory (estimated size 10.2 KB, free 1601.1 MB)
21/12/21 18:08:52 INFO BlockManagerInfo: Added broadcast_1_piece0 in memory on XXX.197:57014 (size: 10.2 KB, free: 1601.7 MB)
21/12/21 18:08:52 INFO SparkContext: Created broadcast 1 from broadcast at DAGScheduler.scala:1163
21/12/21 18:08:52 INFO DAGScheduler: Submitting 1 missing tasks from ShuffleMapStage 0 (MapPartitionsRDD[6] at mapToPair at JavaWordCount.java:49) (first 15 tasks are for partitions Vector(0))
21/12/21 18:08:52 INFO YarnScheduler: Adding task set 0.0 with 1 tasks
21/12/21 18:08:57 INFO ShuffleWriteClientImpl: Successfully send heartbeat to Coordinator grpc client ref to XXX.197:19999
21/12/21 18:08:57 INFO RssShuffleManager: Finish send heartbeat to coordinator and servers
21/12/21 18:09:03 INFO YarnSchedulerBackend$YarnDriverEndpoint: Registered executor NettyRpcEndpointRef(spark-client://Executor) (XXX.164:33718) with ID 1
21/12/21 18:09:03 INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0, r5.XXX.net, executor 1, partition 0, RACK_LOCAL, 8291 bytes)
21/12/21 18:09:03 INFO BlockManagerMasterEndpoint: Registering block manager r5.XXX.net:35938 with 1663.2 MB RAM, BlockManagerId(1, r5.XXX.net, 35938, None)
21/12/21 18:09:04 INFO YarnSchedulerBackend$YarnDriverEndpoint: Registered executor NettyRpcEndpointRef(spark-client://Executor) (XXX.240:51305) with ID 2
21/12/21 18:09:04 INFO BlockManagerMasterEndpoint: Registering block manager XXX.240:30421 with 1663.2 MB RAM, BlockManagerId(2, XXX.240, 30421, None)
21/12/21 18:09:07 INFO ShuffleWriteClientImpl: Successfully send heartbeat to Coordinator grpc client ref to XXX.197:19999
21/12/21 18:09:07 INFO RssShuffleManager: Finish send heartbeat to coordinator and servers
21/12/21 18:09:13 ERROR YarnScheduler: Lost executor 1 on r5.XXX.net: Unable to create executor due to Unable to register with external shuffle server due to : java.lang.UnsupportedOperationException: Unsupported shuffle manager of executor: ExecutorShuffleInfo[localDirs=[/mydatafile01/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-be93539a-76f8-4d33-8f3e-dd2b76a650cc, /mydatafile10/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-05a43f77-8a97-49bc-956d-2b92e99a2306, /mydatafile04/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-35202285-9b46-493f-851e-60e60edc7ba4, /mydatafile05/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-a49caa6b-ce30-454b-96a4-58445adcc5ac, /mydatafile12/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-62c89511-1b76-4f5e-b8db-eb5069245e82, /mydatafile07/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-f21f2f41-423f-4c9d-8182-39dd4888d95b, /mydatafile11/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-83f5f66f-f3db-45b9-bbcf-07d829cf6ec3, /mydatafile02/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-eacb6ebc-b53e-4048-9bfe-726327c3754e, /mydatafile08/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-4457787d-a6b5-4bd4-8971-5f02dd3246df, /mydatafile06/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-c7e47539-5d90-4842-baba-2a1db390c847, /mydatafile09/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-339de134-369f-4e14-a9d4-d2d37fe77ae7, /mydatafile03/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-32429b88-1485-42a9-9484-7fc85f14da0f],subDirsPerLocalDir=64,shuffleManager=org.apache.spark.shuffle.RssShuffleManager]
at org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.registerExecutor(ExternalShuffleBlockResolver.java:155)
at org.apache.spark.network.shuffle.ExternalBlockHandler.handleMessage(ExternalBlockHandler.java:141)
at org.apache.spark.network.shuffle.ExternalBlockHandler.receive(ExternalBlockHandler.java:89)
at org.apache.spark.network.server.TransportRequestHandler.processRpcRequest(TransportRequestHandler.java:159)
at org.apache.spark.network.server.TransportRequestHandler.handle(TransportRequestHandler.java:109)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:140)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:53)
at org.sparkproject.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.apache.spark.network.util.TransportFrameDecoder.channelRead(TransportFrameDecoder.java:102)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at org.sparkproject.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at org.sparkproject.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at org.sparkproject.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at org.sparkproject.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
at org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.registerExecutor(ExternalShuffleBlockResolver.java:155)
at org.apache.spark.network.shuffle.ExternalBlockHandler.handleMessage(ExternalBlockHandler.java:141)
at org.apache.spark.network.shuffle.ExternalBlockHandler.receive(ExternalBlockHandler.java:89)
at org.apache.spark.network.server.TransportRequestHandler.processRpcRequest(TransportRequestHandler.java:159)
at org.apache.spark.network.server.TransportRequestHandler.handle(TransportRequestHandler.java:109)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:140)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:53)
at org.sparkproject.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.apache.spark.network.util.TransportFrameDecoder.channelRead(TransportFrameDecoder.java:102)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at org.sparkproject.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at org.sparkproject.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at org.sparkproject.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
at org.sparkproject.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at org.sparkproject.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at org.sparkproject.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at org.sparkproject.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
21/12/21 18:09:13 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, r5.XXX.net, executor 1): ExecutorLostFailure (executor 1 exited caused by one of the running tasks) Reason: Unable to create executor due to Unable to register with external shuffle server due to : java.lang.UnsupportedOperationException: Unsupported shuffle manager of executor: ExecutorShuffleInfo[localDirs=[/mydatafile01/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-be93539a-76f8-4d33-8f3e-dd2b76a650cc, /mydatafile10/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-05a43f77-8a97-49bc-956d-2b92e99a2306, /mydatafile04/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-35202285-9b46-493f-851e-60e60edc7ba4, /mydatafile05/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-a49caa6b-ce30-454b-96a4-58445adcc5ac, /mydatafile12/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-62c89511-1b76-4f5e-b8db-eb5069245e82, /mydatafile07/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-f21f2f41-423f-4c9d-8182-39dd4888d95b, /mydatafile11/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-83f5f66f-f3db-45b9-bbcf-07d829cf6ec3, /mydatafile02/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-eacb6ebc-b53e-4048-9bfe-726327c3754e, /mydatafile08/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-4457787d-a6b5-4bd4-8971-5f02dd3246df, /mydatafile06/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-c7e47539-5d90-4842-baba-2a1db390c847, /mydatafile09/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-339de134-369f-4e14-a9d4-d2d37fe77ae7, /mydatafile03/yarn/nm-local-dir/usercache/myuser/appcache/application_1637568296779_644452/blockmgr-32429b88-1485-42a9-9484-7fc85f14da0f],subDirsPerLocalDir=64,shuffleManager=org.apache.spark.shuffle.RssShuffleManager]
at org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.registerExecutor(ExternalShuffleBlockResolver.java:155)
at org.apache.spark.network.shuffle.ExternalBlockHandler.handleMessage(ExternalBlockHandler.java:141)
at org.apache.spark.network.shuffle.ExternalBlockHandler.receive(ExternalBlockHandler.java:89)
at org.apache.spark.network.server.TransportRequestHandler.processRpcRequest(TransportRequestHandler.java:159)
at org.apache.spark.network.server.TransportRequestHandler.handle(TransportRequestHandler.java:109)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:140)
at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:53)
at org.sparkproject.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
at org.sparkproject.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
from firestorm.
@Lobo2008 from the error log, do you use external shuffle, if so, please refer readme with https://github.com/Tencent/Firestorm#support-spark-dynamic-allocation
from firestorm.
@Lobo2008 from the error log, do you use external shuffle, if so, please refer readme with https://github.com/Tencent/Firestorm#support-spark-dynamic-allocation
but dynamic-allocation is optional? i'd prefer to test without any modification of spark src code at first.
have tested with different configs blow, none works:
spark.shuffle.service.enabled false
spark.dynamicAllocation.enabled true
Exception in thread "main" org.apache.spark.SparkException: Dynamic allocation of executors requires the external shuffle service. You may enable this through spark.shuffle.service.enabled.
at org.apache.spark.ExecutorAllocationManager.validateSettings(ExecutorAllocationManager.scala:230)
at org.apache.spark.ExecutorAllocationManager.<init>(ExecutorAllocationManager.scala:136)
spark.shuffle.service.enabled true
spark.dynamicAllocation.enabled false
21/12/22 11:02:05 ERROR YarnScheduler: Lost executor 1 on rXXX.net: Unable to create executor due to Unable to register with external shuffle server due to : java.lang.UnsupportedOperationException: Unsupported shuffle manager of executor: ExecutorShuffleInfo[localDirs=[
spark.shuffle.service.enabled true
spark.dynamicAllocation.enabled true
21/12/22 10:37:35 ERROR YarnScheduler: Lost executor 8 on r3.XXX.net: Unable to create executor due to Unable to register with external shuffle server due to : java.lang.UnsupportedOperationException: Unsupported shuffle manager of executor: ExecutorShuffleInfo[localDirs=
spark.shuffle.service.enabled false
spark.dynamicAllocation.enabled false
21/12/22 10:42:13 INFO DAGScheduler: ShuffleMapStage 0 (mapToPair at JavaWordCount.java:49) failed in 47.372 s due to Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, XXX, executor 4): java.lang.NoSuchMethodError: org.apache.spark.scheduler.MapStatus$.apply(Lorg/apache/spark/storage/BlockManagerId;[J)Lorg/apache/spark/scheduler/MapStatus;
at org.apache.spark.shuffle.writer.RssShuffleWriter.stop(RssShuffleWriter.java:300)
from firestorm.
This should be the right configuration without any change in spark.
spark.shuffle.service.enabled false
spark.dynamicAllocation.enabled false
Currently, spark 2.4+ and spark 3.1+ is supported, from your log, I think it is caused by spark version mismatch.
The PR for support 2.3 & 3.0 is in progress.
from firestorm.
Related Issues (20)
- Whether multiple disks are supported for local storage? HOT 4
- duplicate servlets map in Coordinator Server
- 使用firestorm-0.4.0 运行spark3.1.1官方的JavaWordCount报如下错误,并且在yarn-client模式下driver端进程一直不退出 HOT 10
- What‘s the difference between `spark.rss.storage.type` and `rss.storage.type`? HOT 18
- yarn-client模式下driver端进程一直不退出 HOT 9
- In local mode, why directory should be deleted first? HOT 1
- [QUESTION] 依赖Hadoop环境? HOT 3
- [QUESTION] Executor在shuffle write/read 过程中是否落本地盘? HOT 2
- [Feature Request]Add a web UI in Coordinated Server to show the detailed server/job/metrics information HOT 1
- hardcoded relative paths HOT 6
- Whether local multiple replicas are supported? HOT 2
- Compared to the native spark, the shuffle write data of firestorm is always smaller HOT 2
- Unexpected crc value for blockId[474989042101783], expected:1518107711, actual:3331113690 HOT 5
- Shuffle read does not read all data completely? HOT 31
- Support shuffle data replica? HOT 5
- Coordinator HA problem HOT 6
- fault tolerance HOT 4
- Clear buffered data when acquiring memory failed and then retry
- To support more tasks with Firestorm
- how to enter into uniffle wechat or dingtalk?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from firestorm.